C++ 中如何结束 while (cin>>str) 的输入
作者:止步听风
如何结束 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中
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。