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

2022-11-13 13:11:01 输入 结束 gt

如何结束 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中 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

相关文章