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

标签 c++ string parsing spaces

我正在尝试找出一种合适的方法来用 &nbps; 替换彼此相邻的空格 (\x20)。

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>

请注意,跨度内的空间保持不变。

我很难思考跟踪有多少空间彼此相邻的逻辑。我打算找到起始位置,存储它找到的空格数的“长度”,然后使用位置和长度执行 substr()。

最佳答案

您可以使用 while 循环将每次出现的 \x20\x20 替换为   ,直到没有任何东西可以替换为止。 IIRC HTML 尊重   旁边的单个空格,因此您不必担心奇数组的空格。如果您确实需要替换每个空格簇,可以将  \x20 替换为    after 替换所有双空格。

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

关于C++ 替换彼此相邻的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23875745/

相关文章:

java - 使用 JavaParser 计算类中的方法声明 + 方法调用

C++派生类用另一个派生类覆盖基类的成员?

C++ 编译器在封装行为上存在分歧——哪一个做对了?

c++ - 文件设置正确,但 eof() 和 peek() 意外从新流返回错误值

sql - 使用纯 SQLite 将字符串拆分为行

java - 如何在给定一些参数的情况下切割字符串

mysql - MySQL 能否自动透明地删除重复字符串?

javascript - Jison 解析器在第一条规则后停止

c++ - 如何从此输入文件中取出第一列,获取其余列(逐列)

ios - 快速解析 desc 并解析所选元素