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

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

本文关键字:Stroustrup 的书 Bjarne C++ 程序 了解      更新时间:2023-10-16

我需要你宝贵的帮助来解决一个小问题!我正在阅读Bjarne Stroustrup的书,我发现了这个例子:

int main()
{
   string previous = " ";
   string current;
   while (cin >> current) {                                    
      if(previous == current)
        cout << "repeated word: " << current << 'n';
      previous = current;
   }                                                            
   return 0;
}

我的问题是:字符串前面="是什么;做?

它在字符空格之前初始化(就像按空格时一样(。但我认为C++它不会读取它,这是编译器跳过空格的事情。那为什么要初始化它呢?

我试着这样写:字符串上一个;程序仍然正常工作......所以?有什么区别?请启发我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"分配一个空格。

它可能仍然"有效",但如果您在第一次尝试时只需按回车键,则应显示"重复单词"消息。

他可以写:)

string previous;

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

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

相关文章: