子字符串输出不符合预期?
Posted
技术标签:
【中文标题】子字符串输出不符合预期?【英文标题】:Substring output not as expected? 【发布时间】:2013-01-31 22:04:11 【问题描述】:小问题。使用我从文本文件转换的字符串:
std::string content((std::istreambuf_iterator<char>(istr) ),
(std::istreambuf_iterator<char>() ) );
打印出来的样子:
@....@........@......@....................@....@...............@..........@..@......
@....@..@@@...@......@.......@@@..........@....@..@@@....@@@...@..........@..@......
@@@@@@.@...@..@......@......@...@.........@....@.@...@..@......@.......@@@@..@......
@....@.@@@@...@......@......@...@.........@....@.@...@..@......@......@...@..@......
@....@.@......@......@......@...@.........@.@@.@.@...@..@......@......@...@.........
@....@..@@@@...@@.....@@.....@@@...........@..@...@@@...@.......@@.....@@@@..@......
....................................................................................
然而,当我在这里使用这段代码时:
for (int i = 0; i < (content.length()-6); i++)
std::string w = content.substr(i, 6);
std::cout << w << '\n';
我得到了很多我想要的子字符串,但它们看起来不像我预期的那样。我的意图是有这样的东西(作为第一行的例子):
@....@
......
..@...
...@..
......
......
......
@....@
......
......
...@..
......
..@..@
......
相反,我的思路是:
@....@
....@.
...@..
..@...
.@....
@.....
......
......
......
.....@
....@.
...@..
..@...
.@....
我不确定为什么会这样,也许我认为 substr 做了一些它没有做的事情? 我只想获取第一行的前 6 个字母,然后是下一个 6,然后是下一个,依此类推,继续到字符串的第二行。
感谢您的帮助!
【问题讨论】:
简单修复:更改您的期望以匹配输出。这样您就不需要查找错误或进行任何代码更改。 【参考方案1】:我实际上并不了解 C++,但当您尝试创建子字符串 (0, 5) 然后 (6, 11) 然后 (12, 17)。
尝试每次将i
增加 6 而不是 1。所以新的代码是
for (int i = 0; i < (content.length()-6); i += 6)
std::string w = content.substr(i, 6);
std::cout << w << '\n';
在你的例子中被转移的@每次都是相同的@,因为你只是蛇行了一个字符。
【讨论】:
天哪,你是救生员。它已经让我发疯了好几个小时。谢谢..我需要一双新鲜的眼睛-_-【参考方案2】:在 for 循环中尝试使用 i += 6
而不是 i++
。
【讨论】:
以上是关于子字符串输出不符合预期?的主要内容,如果未能解决你的问题,请参考以下文章