C ++替换彼此相邻的空格

时间:2014-05-26 18:17:14

标签: c++ string parsing spaces

我试图找出一种合适的方法来替换彼此相邻的空格(\ 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;">&nbsp;&nbsp;&nbsp;Three Spaces</span>

请注意,范围内的空间保持不变。

我很难想到跟踪彼此相邻的空间的逻辑。我打算找到起始位置,存储一个&#34;长度&#34;找到多少个空格,然后用pos和length做一个substr()。

2 个答案:

答案 0 :(得分:1)

您可以使用while循环将\x20\x20的每个匹配项替换为&nbsp;&nbsp;,直到没有任何内容可以替换。 IIRC HTML尊重&nbsp;旁边的单个空格,因此您不必担心奇数编号的空格组。如果您确实需要替换每个空间群,则可以在替换所有双空格后用&nbsp;\x20 替换&nbsp;&nbsp;

看看这个例子: https://stackoverflow.com/a/5343250/1127098

答案 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);
}