了解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;
}
我的问题是:字符串前面="是什么;做?
它在字符空格之前初始化(就像按空格时一样(。但我认为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
。
相关文章:
- Frank Luna 在他的书"使用 DirectX12 进行 3D 游戏编程"的介绍中盒子示例的问题
- 如何删除已输入的书以及如何使标题,语言和名称在上面放置空格不会出错?
- 关于Stroustrup C++书的自动和{}列表问题
- 如何从Stroustrup的C++书中解释这个正则表达式?
- 我只是在寻找模板,在我的书中找到了这段代码,这显示了隔离错误?
- Stroustrup的C++书挑战赛,有人可以帮助我理解这段代码吗?
- 如何使用Stroustrup的Fltk Text类调用变量?
- 在Stroustrup的例子中,冒号在"return 1 : 2"中是什么意思?
- 使用带有初始值设定项列表的 Stroustrup PPP 书中的向量时出现编译错误
- 不理解 VS 中 HelloWorld 的错误,当包含std_lib来自 Stroustrup 的书时
- Stroustrup的代码审查-编程原理-Ch-4-问题:3-错误:矢量下标超出范围
- 为什么当作为常量字符* 返回时会在此处创建临时字符串?[斯特劳斯特鲁普的书例]
- 在Bjarne Stroustrup的C 书中,这个示例有什么问题
- 我正在尝试学习使用 SDL 制作游戏。我的书教SDL1.2.3,我无法让它在Visual Studio上工作。谁能帮忙?我的错误:
- 根据Stroustrup的矢量与列表
- FLTK 版本 1.3.2,Visual Studio 2012 和 Stroustrup PPP 书的第一个示例
- 为什么在Bjarne Stroustrup的书中,构造函数Zlib_init在类Zlib_init中是私有的
- 了解C++程序 [ Bjarne Stroustrup 的书 ]
- c++ -枚举范围?Bjarne Stroustrup的书
- 为什么Stroustrup的书演示了默认的函数模板参数,这在当时是不允许的?