C++ 中如何结束 while (cinstr) 的输入

C++ 中如何结束 while (cinstr) 的输入

目录

如何结束 while (cin>>str) 的输入

cin

window 下

linux 下

while(cin>>str);auto;find();

方法一SET

方法二VECTOR

学习总结

如何结束 while (cin>>str) 的输入 cin

当从键盘上进行输入并按下回车时,输入的字符就会被送到输入缓冲区进行存储,且以空白字符为分隔符。

window 下

如果本行存在输入字符的情况下,在行尾加 ctrl+z 并且回车之后并不会结束输入,而是将 ctrl+z 当作一个字符来解释,将该字符当作普通字符缓冲并输出。

要结束输入需要在新行(即输入完成之后回车到新行)之后,输入 ctrl+z 并回车结束输入。

linux 下

在新行开头,输入ctrl+d,即为 EOF,此时输入结束。

在行尾结束输入 ctrl+d 则表示输出输入缓存区的数据,此时再次输入 ctrl+d 就代表 EOF,从而结束输入。

while(cin>>str);auto;find(); while(cin>>str);auto;find();

想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。

每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i 件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。输出一行一个数字表示完成所有料理需要多少种不同的材料。

举例:BUTTER FLOUR HONEY FLOUR EGG 输出:4

方法一SET #include <iostream>  #include <set>  #include <string>  using namespace std;  int main() {  string str;  set<string> datas;  //输入流结束的条件就是:^z 之前不能有任何字符输入(回车除外),否则 ^z 起不到流结束的作用。   while (cin >> str) {  datas.insert(str);  }  cout << datas.size() << endl;  return 0;  } 方法二VECTOR #include <iostream>  #include <vector>  #include <string>  #include <algorithm>  using namespace std;  int main(){  string food;  vector<string> Vec;  int count = 0;  while(cin>>food){  //Dev-C++ 5.4.0中的auto 工具——编辑选项——程序——g++修改成g++ -std=c++11  auto  it = find(Vec.begin(),Vec.end(),food);  if (it == Vec.end())  Vec.push_back(food);  }  cout<<Vec.size()<<endl;  return 0;  } 学习总结

问题一:Vector和Set的区别 

首先:Vector是数组,set是一个集合,内部的元素不会重复,同时它会自动进行排序,也是从小到大; 

其次:由于存储结构不同,vector擅长于解决某个位置是什么值的问题,而set擅长于解决,某个元素在那个位置的问题,知道元素的内容,

查找它的位置。因此vector特别好的支持随机访问,而set不支持(不支持下标访问)

问题二:find() 返回符合搜索条件的字符区的第一个字符的索引,没找到目标就返回npos。

if(str.find("jia")==string::npos),没找到==后必有

第二个参数:(可有可无)指出string内的搜索起点的索引

第三个参数:(可有可无)指出搜出的字符个数 

问题三:auto在 Dev-C++ 5.4.0的使用

问题四:while(cin>>str)的使用 windows中 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持易知道(ezd.cc)。

推荐阅读