手动实现字符串中HTML标签移除的编程练习求助
手动移除字符串中HTML标签的代码完善方案
嘿,我懂你现在在做教授布置的手动移除HTML标签编程练习——虽然之后会学到现成的工具,但手动实现确实能帮你把字符串处理的逻辑摸得透透的。你目前的代码只开了个头,咱们来一步步把它补全吧!
首先,先把你写的现有代码贴出来(看起来还没写完哦):
#include<iostream> #include<string> using namespace std; int main() { string name = "<HTML> smelly </b> butts </b> smell<test>"; cout << name << endl; int a = 0, // 这里代码还没完成对吧? }
核心实现思路
要手动干掉HTML标签,核心就是精准定位标签的边界:找到每个<的起始位置,再找到对应的>结束位置,然后把这两个符号之间的所有内容(包括<和>)从字符串里删掉,重复这个过程直到字符串里再也找不到<为止。
完整的实现代码
我给你写了一个可以直接运行的版本,里面加了详细的逻辑处理:
#include<iostream> #include<string> using namespace std; int main() { string name = "<HTML> smelly </b> butts </b> smell<test>"; cout << "原始字符串: " << name << endl; size_t startPos; // 循环查找并移除所有HTML标签 while ((startPos = name.find('<')) != string::npos) { size_t endPos = name.find('>', startPos); // 处理两种情况:找到闭合的>,或者字符串末尾有未闭合的< if (endPos != string::npos) { // 删除从<到>的全部内容(包括两个符号) name.erase(startPos, endPos - startPos + 1); } else { // 如果找不到>,直接删掉从<开始的剩余部分 name.erase(startPos); break; } } cout << "移除标签后的字符串: " << name << endl; return 0; }
代码关键点说明
- 用
string::find()来定位<和>,string::npos是字符串类里的特殊值,表示找不到目标字符 - 每次删除标签后字符串长度会变化,所以用
while循环持续检查,直到没有<为止 - 加了对未闭合标签的处理(比如字符串末尾的
<test),避免程序出现异常
内容的提问来源于stack exchange,提问作者user9506309
相关产品推荐
相关产品推荐

