繁体   English   中英

理解C ++程序[Bjarne Stroustrup的书]

[英]Understanding a C++ program [ Bjarne Stroustrup's book ]

我需要你的宝贵帮助来解决一个小问题! 我正在阅读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 =“”; 做?

它在字符空间之前初始化(就像按空格时一样) 但我认为在C ++中它不会读取它,而是关于编译器跳过空白的东西。 为什么要把它初始化呢?

我试着这样写: string previous; 程序仍然正常工作......所以? 有什么不同? 请赐教x)

你会对C ++中忽略空格的含义感到困惑。 在C ++中

std::string the_string = something;

与...一样对待

std::string      the_string=something          ;

否如果你有一个字符串文字,文字中的空格不会被忽略,因为它是字符串的字符的一部分。 所以

std::string foo = " ";

创建一个带有一个空格的字符串,其中as

std::string foo = "    ";

创建一个包含4个空格的字符串。

你是对的,当使用std::cin读取输入时,空格是你永远不会得到的。 因此, previous字符串初始化的值可能永远不会(即,当读取第一个字时)可能匹配读入current字符串的字。

在这种情况下, previous也可以初始化为空字符串,因为istream::operator>>跳过所有空格,并且你永远不会像通过这样读取std::cin那样得到空。 但是,还有其他使用std::cin (例如与getline()一起使用),这可能导致读取空字符串。

这本书详细解释了这个例子

string previous = " ";

为字符串变量'previous'分配一个空格。

它可能仍然“有效”,但如果您只是在第一次尝试时按Enter键,则应出现“重复单词”消息。

他可以写:)

string previous;

这个想法是,如果默认设置为跳过空格,则operator >>不能输入空字符串。

因此,任何与空字符串或包含空格的字符串的比较current将产生false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM