在while循环中
cin in a while-loop
#include <iostream>
using namespace std;
int main()
{
string previous;
string current;
while (cin >> current)
{
if(current == previous)
{
cout << "repeated word";
}
previous=current;
}
return 0;
}
我的问题是:
当它表示
while(cin>>current)
时,为什么整个输入的文本字符串没有分配给current?我不明白它是如何单独比较所有单词的。它是如何得到"先前"这个词的?它怎么知道两个相同的单词是相邻的?
cin
赋值,第一个单词被分配给current,然后将其与前一个单词进行比较,但由于它是第一个单词,它没有前一个单词,所以它只是将第一个单词分配给previous,并比较句子中的下一个单词,直到没有更多的单词。我很确定这就是它是如何工作的,但我要把它留在这里以防有人想知道类似的事情。 - 默认行为是在读取字符串时停止空格。您可以通过输入
std::cin >> std::noskipws
将其更改为读取空白。 - 前一个单词总是在循环结束时赋值。给出第一部分的答案,应该清楚为什么前面的工作。
- 如果您将
std::istream::operator>>
与std::string参数一起使用,它将读取字符,直到找到任何空白字符为止。这意味着如果你输入一个句子,它只会读取一个"单词"。使用std::getline(cin, current);
读取整行(直到换行符)。 - 将当前值赋给先前值:
previous = current
。这意味着在阅读current
之后,您将previous
变为current
。所以下次,在你阅读之前,你可以比较先前和当前,看看它们是否相同。
如果您想使用字符串,必须使用#include string
或std_lib_facilities.h
相关文章:
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- while循环中while循环的时间复杂度是多少
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 擦除while循环中迭代的元素
- 为什么我不能在 while 循环中创建线程?
- 退出简单while循环时出现问题
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 即使没有满足他们的条件,我也无法通过一些 do-while 循环
- 嵌套While循环不起作用(C++问题)
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 使用 GMP 的 while 循环出现问题
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 为什么在 while 循环中返回表达式不起作用
- 如何使用 do while 循环确定最高值和最低值
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 用于在 C++ 中使用 while 循环查找下一个素数的简单函数
- OpenCV QT,显示视频的帧(不使用while循环)
- 输入循环 while 函数
- c++中的循环(while)
- 为什么这段代码没有循环(while)