我试图找出一种合适的方法来替换彼此相邻的空格(\ x20)和& nbps;' s。
string SPACE = "\x20";
string str = "<span style=\"color:#f00;\""> Three Spaces</span>";
size_t pos = str.find(SPACE, 0);
size_t prev = 0;
size_t start = 0;
size_t length = 0;
while (pos != string::npos)
{
prev = pos;
if (prev == (start + 1))
{
// this is where i start to get lost...
}
else
{
start = pos;
}
pos = str.find(SPACE, pos + 1);
}
所以str的最终结果是
<span style="color:#f00;"> Three Spaces</span>
请注意,范围内的空间保持不变。
我很难想到跟踪彼此相邻的空间的逻辑。我打算找到起始位置,存储一个&#34;长度&#34;找到多少个空格,然后用pos和length做一个substr()。
答案 0 :(得分:1)
您可以使用while循环将\x20\x20
的每个匹配项替换为
,直到没有任何内容可以替换。 IIRC HTML尊重
旁边的单个空格,因此您不必担心奇数编号的空格组。如果您确实需要替换每个空间群,则可以在替换所有双空格后用 \x20
替换
。
答案 1 :(得分:1)
string SPACE = "\x20";
string str = "<span style=\"color:#f00;\"> Three Spaces</span>";
size_t pos = str.find(SPACE, 0);
string replace_str="&nbps;";
while (pos != string::npos)
{
size_t number_of_space=1;
for(size_t i=pos+1;i<str.size();i++)
{
if(str[i]=='\x20'){
number_of_space++;
}
else{
break;
}
}
if(number_of_space>1)
{
while(number_of_space>0){
str.erase(str.begin()+pos);
str.insert(pos,replace_str);
number_of_space--;
pos+=replace_str.size();
}
}
pos = str.find(SPACE, pos + 1);
}