在这个循环中,我想在外翻点(。)后添加新行(\ n)。
如何在每个点后添加新行时打破循环?
while (alltxt.find(".") != string::npos)
alltxt.replace(alltxt.find("."), 1, ".\n");
答案 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::find与s.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()中的条件需要检查两次(您绝对需要在查找后检查),这样只有一个测试可能会有所不同。