【问题标题】:C++ Replace spaces that occur next to each otherC++ 替换相邻的空格
【发布时间】:2014-07-15 13:25:07
【问题描述】:

我正在尝试找出一种体面的方法来用 &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>

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

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

【问题讨论】:

  • 您的问题是什么?除了“我怎么写我的程序”,就是跑题了
  • 我想,我希望确保我走在正确的道路上。找到第一个空格,然后检查下一个空格是否比上一个空格+1,如果是,则make length++;
  • 尝试两次。首先将所有双空格替换为&amp;nbsp;&amp;nbsp;。然后将所有&amp;nbsp; 替换为&amp;nbsp;&amp;nbsp;。但是请确保您的代码中没有双空格。
  • @Onyxdragun:不,真的。这更像是一个“讨论”,这是一个问答存储库。每个帖子应该对多人有用,而不仅仅是发布它们的人。这个对我的口味来说不够具体。无论如何,因为我很好,所以我在上面给了你一个提示。

标签: c++ string parsing spaces


【解决方案1】:

您可以使用 while 循环将每次出现的 \x20\x20 替换为 &amp;nbsp;&amp;nbsp;,直到没有可替换的内容。 IIRC HTML 尊重&amp;nbsp; 旁边的单个空格,因此您不必担心奇数组的空格。如果您确实需要替换每个空格簇,可以在替换所有双空格后将&amp;nbsp;\x20 替换为&amp;nbsp;&amp;nbsp;

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

【讨论】:

  • 他已经有了一个while循环。下一步怎么做才是问题。
  • 我基本上是这样做的。即使有 3 个以上的空间也能很好地工作。
【解决方案2】:
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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2014-04-17
    • 2017-02-25
    • 2017-10-01
    • 2011-07-10
    • 1970-01-01
    • 2019-12-29
    相关资源
    最近更新 更多