C++:为什么空格总是在读取时终止字符串?

Nul*_*0rm 6 c++ string std

使用类型std::string来接受一个句子,用于练习(我没有在C++中使用过很多字符串)我正在检查一个字符是否是一个元音.我懂了:

for(i = 0; i <= analyse.length(); i++) {
if(analyse[i] == 'a' || analyse[i] == 'e' [..etc..]) {
 ...vowels++;    
} else { ...
 ...consonants++;
}
Run Code Online (Sandbox Code Playgroud)

如果字符串是一个单词,这可以正常工作,但第二个我添加一个空格(IE:aeio aatest)它只计算第一个块并将空间计为辅音,并退出读取句子(退出for循环或东西).

空格是否计为无字符== null?或者有点奇怪std::string?,知道为什么会发生这种情况会很有帮助!

编辑:我只是通过std :: cin接受字符串,例如:

std::string analyse = "";
std::cin >> analyse;
Run Code Online (Sandbox Code Playgroud)

Jer*_*fin 9

我猜你正在用类似的东西读你的字符串your_stream >> your_string;.操作者>>的字符串被定义为工作(约)相同scanf%s转换,其读取,直到它遇到空白-因此,operator>>做同样的.

您可以使用读取整行输入std::getline.您可能还想查看我发布到上一个问题的答案(提供了一些替代方案std::getline).