C++按空格拆分输入行时无法向string类型vector push_back元素问题
代码错误原因说明
- 第一个错误:
std::cin >> command的读取规则问题。C++中使用>>运算符从输入流读取字符串时,默认会以任意空白字符(空格、换行、制表符等)作为分隔符,读取到第一个空白字符就会停止读取,同时丢弃该空白字符。所以你输入foo bar时,command变量最终仅存储了foo,完全没有读取到后续的空格和bar内容,因此你遍历command的循环里根本找不到空格字符,command_seperated的push_back逻辑永远不会被触发,最终vector为空,最后一个遍历输出的循环自然没有内容。你观察到程序似乎遇到第一个空格就停止运行,本质就是command仅包含foo,循环只执行3次就结束了,没有后续内容可以处理。 - 第二个错误:空格处理逻辑存在漏洞。假设后续你修改了输入读取逻辑能拿到完整带空格的输入,你当前的空格判断逻辑也有问题:当检测到当前字符是空格时,你将
command_temp存入vector并清空,但后续代码仍会执行command_temp.push_back(command[i]),会把空格字符存入下一个字符串的开头,导致拆分出来的字符串开头多出来不必要的空格。 - 第三个错误:末尾单词遗漏问题。即便你修复了上述两个问题,当前逻辑也只能在遇到空格的时候触发前一个单词的存入操作,当遍历到输入字符串末尾时,最后一个单词后面没有空格触发存入逻辑,会导致最后一个单词永远不会被存入
command_seperated中。
内容的提问来源于stack exchange,提问作者baguettio
相关产品推荐
相关产品推荐

