C ++如何打破while循环?

时间:2017-12-04 18:41:14

标签: c++ string loops while-loop find

在这个循环中,我想在外翻点(。)后添加新行(\ n)。

如何在每个点后添加新行时打破循环?

while (alltxt.find(".") != string::npos)
    alltxt.replace(alltxt.find("."), 1, ".\n");

3 个答案:

答案 0 :(得分:2)

您可以使用接受起始位置的std::string::find的不同重载。然后,在您找到的'.'之前开始每次搜索。

这样的事情:

std::string::size_type pos = 0;

while((pos = s.find(".", pos)) != std::string::npos)
{
    s.replace(pos, 1, ".\n");
    pos += 2; // move past the dot (and the extra '\n')
}

这取决于惯用的 assign&测试执行赋值,然后测试结果:

// do the assignment and then test the results
(pos = s.find(".", pos)) != std::string::npos

另请注意,pos std::string::finds.size()相等(但不大于)<a href="https://www.facebook.com/sharer/sharer.php?u=<%= asset_url('image.jpg') %>" target="_blank" title="Click to share on Facebook"><span></span>Click to share on Facebook (Opens in new window)</a> 是合法的。

答案 1 :(得分:2)

这是一个可以做你想做的通用功能:

std::string& replace_all(std::string& str, const std::string& needle,
                         const std::string& replacement)
{
  auto idx = str.find(needle, 0);
  while (idx != std::string::npos) {
    str.replace(idx, needle.size(), replacement);
    idx = str.find(needle, idx + replacement.size());
  }
  return str;
}

答案 2 :(得分:1)

使用从某个位置开始的查找重载。类似下面的内容(未测试,只是说明性的):

if(!str.empty())
{
    size_t pos = 0;
    while(true)
    {
    pos = str.find(pos, '.');
    if(std::string::npos==pos)
    break;
    str.insert(++pos, 1, '\n');
    }
    }

使用while()中的条件需要检查两次(您绝对需要在查找后检查),这样只有一个测试可能会有所不同。