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

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

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

(0)

相关推荐

  • 浅谈c++中的while(cin)问题

    xp系统中利用dev-cpp进行编程,语句while(cin>>str),str是个string类型,在一行中输入几个string,末位加个ctrl+z,输入没有结束,除非出入换行后,再输入ctrl+z才能跳出输入.一直不明白未什么,解释请看下. 输入缓冲是行缓冲.当从键盘上输入一串字符并按回车后,这些字符会首先被送到输入缓冲区中存储.每当按下回车键后,cin.get()   就会检测输入缓冲区中是否有了可读的数据.cin.get()   还会对键盘上是否有作为流结束标志的   Ctrl+Z 

  • c++ cin 作为while条件(详解)

    本文一切测试在windows clion中进行 在clion中,ctrl +z并不是文件结束符 在cmd中运行,只需要ctrl+z再加回车就可以得到正确结果 1.cin cin是C++编程语言中的标准输入流对象,即istream类的对象.cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘.此外,cout是流的对象,即ostream类的对象,cerr是标准错误输出流的对象,也是ostream 类的对象.这里的标准输出指的是终端键盘,标准错误输出指的是终端的屏幕. 在理解cin功能时

  • C++ cin输入的多种方法详解

    目录 前言 一.cin 1.cin >> 2.cin.get() 2.1 函数介绍 3.getline() 前言 在C++中一般使用cin来进行交互,获取用户输入信息.cin是C++编程语言中的标准输入流对象,即stream类的对象.cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘.主要用到有cin >>.cin.get().cin.getline().cin读取数据也是从缓冲区中获取数据,缓冲区为空时,cin的成员函数会阻塞等待数据的到来,一旦缓冲区中有数据,就

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

    目录 如何结束 while (cin>>str) 的输入 cin window 下 linux 下 while(cin>>str);auto;find(); 方法一SET 方法二VECTOR 学习总结 如何结束 while (cin>>str) 的输入 cin 当从键盘上进行输入并按下回车时,输入的字符就会被送到输入缓冲区进行存储,且以空白字符为分隔符. window 下 如果本行存在输入字符的情况下,在行尾加 ctrl+z 并且回车之后并不会结束输入,而是将 ctrl

  • Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题

    Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰.你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然). python3.0中怎么创建bytes型数据 bytes([1,2,3,4,5,6,7,8,9]) bytes("python"

  • Python3中的bytes类型和str类型

    目录 前言: 编码发展的历史 bytes和str之间的异同 前言: Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和bytes,你不能拼接字符串和字节流,也无法在字节流里搜索字符串(反之亦然),也不能将字符串传入参数为字节流的函数(反之亦然). 下面让我们深入分析一下二者的区别和联系. 编码发展的历史 在谈bytes和str之前,需要先说说关于编码

  • iOS中使用正则表达式NSRegularExpression 来验证textfiled输入的内容

    何谓正则表达式 正则表达式(regular expression),在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容.正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的.正则表达式通常缩写成"regex",单数有regexp.regex,复数有regexps.regexes.regexen. 正则表达式组成 正则表达式有两种类型的字符

  • MyBatis中模糊查询使用CONCAT('%',#{str},'%')出错的解决

    目录 模糊查询使用CONCAT('%',#{str},'%')出错 原因及解决 MyBatis like模糊查询,CONCAT函数用法 以MySQL为例 模糊查询使用CONCAT('%',#{str},'%')出错 原因及解决 经过我一套乱七八糟毫无思路地查找后,发现不是Mybatis的原因,原来是SQL server不支持CONCAT函数,直接用加号连接就好 MyBatis like模糊查询,CONCAT函数用法 以MySQL为例 <select id="getByPage"

  • Python中的模块导入和读取键盘输入的方法

    导入模块 import 语句 想使用Python源文件,只需在另一个源文件里执行import语句,语法如下: import module1[, module2[,... moduleN] 当解释器遇到import语句,如果模块在当前的搜索路径就会被导入. 搜索路径是一个解释器会先进行搜索的所有目录的列表.如想要导入模块hello.py,需要把命令放在脚本的顶端: #!/usr/bin/python # -*- coding: UTF-8 -*- # 导入模块 import support # 现

  • IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点

    公司WEB项目要求是必须兼容FF3,IE6/7/8.本文所述为IE6下的一个BUG. 项目里面写了一个自己封装的弹出层,原理是先动态添加一个遮罩层,再动态添加一个DIV(Table)层(做弹出层的PNG半透明边框效果),DIV里面动态添加一个IFrame,这个Iframe页面指向一个现存的HTM文件. 如果这个HTM文件中,包含文本输入框这样的一些表单元素,在IE6下就会出娄子了. 测试组的人说了,弹出层打开后,"经常"无法获取文本框的焦点,就是鼠标点文本框无法获取焦点并显示输入标记,

  • php中将html中的br换行符转换为文本输入中的换行符

    下面这几个方法将能够帮你解决这个问题. PHP版将html中的<br />换行符转换为文本框中的换行符: 复制代码 代码如下: function br2nl($text){    return preg_replace('/<br\\s*?\/??>/i','',$text);} 或者: 复制代码 代码如下: function br2nl($text){    $text=preg_replace('/<br\\s*?\/??>/i',chr(13),$text); r

  • vue中input框的禁用和可输入问题

    目录 input框的禁用和可输入 关于输入框的一些操作 input框的禁用和可输入 input是我们经常使用的文本输入框,在vue中我们可以用v-model来绑定输入框的值,但是有时我们拿到一个值并通过v-model绑定到一个input框里,但是我们只想要显示这个值,不能修改,然后在某些特定的情况下在去改变这个值,这个时候就牵涉到文本框的禁用了    <input       type="text"//绑定的值       v-model="Copy.possWord1

  • Java中Scanner使用方式:单行/多行输入

    目录 问题 最好解决的情况 单行输入多个参数 多行输入多个参数,每行参数个数不定 问题 解决这种情况下的Scanner输入:单行,多行,数值,字符串 平时写程序一般不用Scanner,线上笔试的时候,各大公司热衷于Scanner输入. 平时用LeetCode刷题也不会用到,结果多次在笔试时候卡在Scanner,特来总结一波. 最好解决的情况 多行输入元素,其中第一行几个数字表示下面几行的个数. 以三行输入为例,第一行输入两个数字m,n,分别表示数组num1和num2的长度,第二行和第三行输入nu

随机推荐