使用类型std::string
接受一个句子,对于练习(我没有在C ++中使用过很多字符串)我正在检查一个字符是否是一个元音。我明白了:
for(i = 0; i <= analyse.length(); i++) {
if(analyse[i] == 'a' || analyse[i] == 'e' [..etc..]) {
...vowels++;
} else { ...
...consonants++;
}
如果字符串只是一个单词,这可以正常工作,但是第二个我添加一个空格(IE: aeio aatest )它只计算第一个块并将空间计为辅音,并且退出阅读句子(退出for循环或其他东西)。
空格是否计为无字符== null?或者与std::string
有点奇怪?,知道为什么会发生这种情况会很有帮助!
编辑: 我只是通过std :: cin接受字符串,例如:
std::string analyse = "";
std::cin >> analyse;
答案 0 :(得分:9)
我猜你正在用your_stream >> your_string;
之类的东西读你的字符串。字符串的运算符>>
被定义为与scanf
的{{1}}转换相同(大约),它会在遇到空格时读取 - 因此,%s
执行相同。
您可以使用operator>>
读取整行输入。您可能还想查看我发布到上一个问题的answer(提供std::getline
的一些替代方法)。
答案 1 :(得分:4)
我无法从代码中看出你已经粘贴了,但是我会想出你正在使用流提取操作符读取字符串(stream&gt;&gt; string)
流提取操作符在遇到空格时停止。
如果这不是正在发生的事情,你能告诉我们你是如何填充你的字符串,以及它的内容是什么?
如果我是对的,那么你会想要一种不同的方法来读取字符串中的内容。 std :: getline()可能是从文件中读取最简单的方法。它停在换行符而不是空格处。
根据已修改的问题进行修改: 使用它(双重检查语法。我不在我的编译器前面。):
std::getline(std::cin, analyze);
当你按“输入”时,这应该停止阅读。
答案 2 :(得分:2)
如果您想要读取整行(包括空白),那么您应该使用getline阅读。示意性地看起来像这样:
#include <string>
istream& std::getline( istream& is, string& s );
要阅读整行,你可以这样做:
string s;
getline( cin, s );
cout << "You entered " << s << endl;
PS:这个词是“辅音”,而不是“辅音”。
答案 3 :(得分:1)
istream上的>>
运算符分隔空格上的字符串。如果您想获得整行,可以使用readline(cin,destination_string)
。