了解 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 = " "; 是做什么的?
它将 previous 初始化为字符 space (就像你按下 space) 一样。但我认为在 C++ 中它不会读取它,关于编译器跳过 whitespace。为什么要初始化它呢?
我试过这样写:string previous; 程序仍然可以正常工作...所以?有什么区别?请赐教 x)
string previous = " ";
将 space 分配给字符串变量 'previous'。
它可能仍然 'work',但如果您在第一次尝试时直接按回车键,应该会出现 'repeated word' 消息。
您可能对 C++ 中忽略白色的含义感到困惑space。在 C++ 中
std::string the_string = something;
与
的待遇相同
std::string the_string=something ;
No 当你有一个 string literal 时,文字中的白色 space 不会被忽略,因为它是字符串字符的一部分。所以
std::string foo = " ";
创建一个包含 space 的字符串,其中
std::string foo = " ";
创建一个包含 4 space 的字符串。
你说得对,使用 std::cin
读取输入时永远不会出现空格。因此,previous
字符串被初始化为一个值,该值永远(即在读取第一个单词时)可能与读入 current
字符串的单词匹配。
在这种情况下,previous
也可以初始化为一个空字符串,因为 istream::operator>>
会跳过所有空格,并且您永远不会像从 std::cin
那样读取一个空字符串。但是,还有其他使用 std::cin
的方法(例如与 getline()
一起使用),这可能会导致读取空字符串。
他可以写:)
string previous;
这个想法是,如果默认设置为跳过空格,operator >>
不能输入空字符串。
因此,任何与空字符串或包含空格的字符串的比较 current
都会产生 false
。
一个小问题需要您宝贵的帮助! 我正在阅读 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 = " "; 是做什么的?
它将 previous 初始化为字符 space (就像你按下 space) 一样。但我认为在 C++ 中它不会读取它,关于编译器跳过 whitespace。为什么要初始化它呢?
我试过这样写:string previous; 程序仍然可以正常工作...所以?有什么区别?请赐教 x)
string previous = " ";
将 space 分配给字符串变量 'previous'。
它可能仍然 'work',但如果您在第一次尝试时直接按回车键,应该会出现 'repeated word' 消息。
您可能对 C++ 中忽略白色的含义感到困惑space。在 C++ 中
std::string the_string = something;
与
的待遇相同std::string the_string=something ;
No 当你有一个 string literal 时,文字中的白色 space 不会被忽略,因为它是字符串字符的一部分。所以
std::string foo = " ";
创建一个包含 space 的字符串,其中
std::string foo = " ";
创建一个包含 4 space 的字符串。
你说得对,使用 std::cin
读取输入时永远不会出现空格。因此,previous
字符串被初始化为一个值,该值永远(即在读取第一个单词时)可能与读入 current
字符串的单词匹配。
在这种情况下,previous
也可以初始化为一个空字符串,因为 istream::operator>>
会跳过所有空格,并且您永远不会像从 std::cin
那样读取一个空字符串。但是,还有其他使用 std::cin
的方法(例如与 getline()
一起使用),这可能会导致读取空字符串。
他可以写:)
string previous;
这个想法是,如果默认设置为跳过空格,operator >>
不能输入空字符串。
因此,任何与空字符串或包含空格的字符串的比较 current
都会产生 false
。