我需要你的宝贵帮助来解决一个小问题! 我正在阅读Bjarne Stroustrup的书,我发现了这个例子:
int main()
{
string previous = " ";
string current;
while (cin >> current) {
if(previous == current)
cout << "repeated word: " << current << '\n';
previous = current;
}
return 0;
}
我的问题是: string previous =&#34; &#34;; 做什么?
它将之前的初始化为字符空间(就像按空格时一样)。但我认为在C ++中它没有读取它,有些东西是关于编译器跳过空白的。为什么要把它初始化呢?
我试着这样写: string previous; ,程序仍能正常工作......所以?有什么不同?请赐教x)
答案 0 :(得分:4)
你会对C ++中忽略空格的含义感到困惑。在C ++中
sizeof(int)
的处理方式与
相同std::string the_string = something;
否如果你有一个string literal,文字中的空格不会被忽略,因为它是字符串字符的一部分。所以
std::string the_string=something ;
创建一个带有一个空格的字符串,其中为
std::string foo = " ";
创建一个包含4个空格的字符串。
答案 1 :(得分:3)
你是对的,在使用std::cin
阅读输入时,空白是你永远不会得到的。因此,previous
字符串初始化为一个永远不会(即读取第一个单词时)可能与读入current
字符串的单词匹配的值。
在这种情况下,previous
也可能被初始化为空字符串,因为istream::operator>>
会跳过所有空格,并且通过这种方式从std::cin
读取,你永远不会得到空。但是,还有其他方法可以使用std::cin
(例如与getline()
一起使用),这可能会导致读取空字符串。
答案 2 :(得分:1)
string previous = " ";
为字符串变量'previous'指定一个空格。
它可能仍然“有效”,但如果您只是在第一次尝试时按Enter键,则应显示“重复单词”消息。
答案 3 :(得分:1)
他可以写:)
string previous;
如果默认设置为跳过空格,则operator >>
无法输入空字符串。
因此任何带有空字符串的比较current
或包含空格的字符串都会产生false
。