C++ 而C+中的函数和cin+;
自从我开始阅读Stroustrup的书《编程原则和实践》以来,已经有几天了。他的语法重复检测代码如下:C++ 而C+中的函数和cin+;,c++,C++,自从我开始阅读Stroustrup的书《编程原则和实践》以来,已经有几天了。他的语法重复检测代码如下: string previous = " "; string current; while (cin >> current){ if (previous == current) cout << "repeated word:" << current << "\n"; previous = current; } st
string previous = " ";
string current;
while (cin >> current){
if (previous == current)
cout << "repeated word:" << current << "\n";
previous = current;
}
string-previous=”“;
串电流;
而(cin>>当前){
如果(先前==当前)
试着像算法一样思考:
While the text isn t complete
read a word
if this word is like the previous one
there s a repeated word
store this word for next iteration
while(cin>>current)
会一个接一个地发送一个单词,直到cin为空。尝试将其视为算法:
While the text isn t complete
read a word
if this word is like the previous one
there s a repeated word
store this word for next iteration
while(cin>>current)
将一个字接着一个字发送,直到cin为空。答案非常简单
while (cin >> current)
读取输入,直到里面什么都没有。标准重载的运算符>>
跳过空白,然后读取所有内容,直到遇到另一个空白字符或到达输入的末尾。由于它位于while
循环中,因此在循环的每次迭代中都会调用它。这就是为什么这个句子答案很简单
while (cin >> current)
读取输入,直到里面什么都没有。标准重载的运算符>>
跳过空白,然后读取所有内容,直到遇到另一个空白字符或到达输入的末尾。由于它位于while
循环中,因此在循环的每次迭代中都会调用它。这就是为什么这个句子被拆分为单词。简单地说,它将读取单词,直到没有单词为止!一旦到达输入的末尾,或者遇到非字符串(好吧,祝您好运),在流上设置了一个错误标志。cin>>current
的计算结果为cin
,设置错误标志后,该值可以转换为布尔值false
。由于您使用cin>>current
作为循环条件,这将结束循环。简单地说,它将读取字,直到没有字为止!一旦inp结束到达ut,或者遇到非字符串(好吧,祝您好运),在流上设置了一个错误标志。cin>>current
的计算结果为cin
,设置错误标志后,该值又可以转换为布尔值false
。由于您使用cin>>current
作为循环条件,因此循环结束。cin
是istream
模板类的一个实例。operator>>
操作此istream实例以将输入加载到数据中,并返回对此istream
的引用。然后通过调用cin::operator void*()
对其进行测试,调用fail()
函数来测试操作是否成功。这就是为什么可以在while条件下使用此操作的原因
while ( cin >> current)
{
//...
cin
是istream
模板类的一个实例。operator>
作用于这个istream实例,将输入加载到数据中,并返回对这个istream
的引用。然后通过调用cin::operator void*()
来测试它
用于测试操作是否成功的函数。这就是为什么可以在while条件下使用此操作的原因
while ( cin >> current)
{
//...
我在回答,因为从你的评论来看,你的问题似乎 与其他答案所涉及的问题不同
std::istream
是一个流;在
(C++)也可以用于某些非顺序的形式。
输入,但这是一个高级功能,使用起来很棘手,而且
在这里不需要关心我们。)的重要方面
顺序输入或流是它从中提取数据的过程
它的来源,一旦数据被提取出来,它就不再是
从逻辑上讲,它可以被认为是
将位置标记插入文件中的数据中;每次
提取一个字符,位置标记前进,然后
始终在位置标记处提取。因此,当您写入时:
std::string dest;
std::cin >> dest;
>
运算符(它只不过是一个具有
一个特殊的名字,你将在本书后面看到)第一段摘录
字符,直到找到一个不是空白的字符;然后
提取字符,直到找到一个空白字符,
将它提取的每个字符放入dest
。它还将
如果没有更多要提取的字符,请停止,
一种称为文件结束的条件。如果在文件结束之前发生这种情况
将任何字符放入dest
,输入将失败;此
故障将被存储在流中,并在以下情况下使用:
在需要true或false的上下文中使用流:
除非流失败,否则该流为真
但需要保留的重要一点是,这条流永远不会消失
提取相同字符两次。如果要查看此
更好的是,流有一些低级函数,允许您
要提取数据,请逐个字符。您可能需要
尝试:
charch;
while(std::cin.get(ch)){
std::cout
是否调用此函数
直到它完成它的任务。它是一个多一点
复杂;尤其是,>
通常无法知道
已经完成,直到它看起来有一个字符太远,所以有
是指偷看下一个字符,而不提取它,
还有一种将你提取的最后一个角色推回的方法
在溪流的前面,这样你就可以再看一遍了
是管理错误状态的方法。(假设您在
int
,但是接下来要读取的字符是“abc”。)但是
现在,你不必担心所有这些。现在
现在,只要记住,一旦一个字符被读过,它就是
消失了,再也看不见了。我在回答,因为从你的评论来看,你的问题似乎已经解决了 与其他答案所涉及的问题不同
std::istream
是一个流;在
(C++)也可以用于某些非顺序的形式。
输入,但这是一个高级功能,使用起来很棘手,而且
在这里不需要关心我们。)的重要方面
顺序输入或流是它从中提取数据的过程
它的