子字符串输出不符合预期?

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++

【讨论】:

以上是关于子字符串输出不符合预期?的主要内容,如果未能解决你的问题,请参考以下文章

字符串应用,expect预期交互,数组,正则表达式

动态规划之最长公共子序列(LCS)

修改字符串列并替换子字符串 pyspark

5. 最长回文子串

负前瞻行为不符合预期

最长回文子串