估计有很多人和我的感受一样,笔试的时候,输入就耗费了很长时间,有几次甚至因为输入的问题,核心思想都想出来了,还是gg了。故此在这里总结c++中常见的输入。
目录
基础:cin / cin.getline / cin.get / getline(string)简单用法
零、',' 作为输入分隔符
一、以空格为间隔的数组
二、多组测试数据(while(cin>>...))
三、无空格 的字符串,cin>> , 如果是char[] memset
四 、有空格的字符数组:cin.getline(不记录'\n') or cin.get(记录'\n')
五、输入字符串string
六、以空('/0')作为输入的结束,第一个字符为'\0' input[0]!='\0'
具体应用:(字符串输入合法非法去重左移外排)
例题:输入五个学生的名字,每个学生的名字不超过10个字符,输入时学生名字之间用逗号隔开,把这五个名字存储并换行输出
#include
using namespace std;
int main()
{
char a[5][10];
int i;// 每次遇到',' 就终止了 ,不保留在缓冲区。
for(i=0;i<4;i++)cin.getline(a[i],10,',');
// 最后一个是输入5'/n'没有','不符合上面的式子,需要重新把缓冲区中的读出来
cin.getline(a[i],10);
for(i=0;i<5;i++)
cout<
这样我们就可以完成完成用任何符号作为分割符的输入了!此处getline换成get是不行的,因为cin.get不会删除缓冲区中的分隔符’,‘ 后续输入不能继续进行
input:
5
1 2 3 4 5
注意1 2 3 4 5之后有enter,enter是判断输入流结束的表现。
int n;
cin>>n;
int *a = new int[n];
for(int i = 0;i < n;i++)
{
cin >> a[i];
}
比如 输入的N组数据
5
1 2 3 4 5
3
123
...
int n;
while(cin>>n){//while cin这里
int* a = new int[n];
...
}
#include//和string是两个东西!!
char out[8];
memset(out,'0',8);//初始化注意
char str[30];
cin>>str;
//也可以用string,但是都不记录空格
输出的时候也必须
for(int i =0;i<8;i++){//必须是这种
cout<< out[i]; //否则会出现 烫烫
}
char str[30];
cin.getline(str,30);//读入整行数据,它使用回车键输入的换行符来确定输入结尾。
//cin.get(str,len);//这个还会保留换行符
# include
string str;
getline(cin,str);
//cin>>str;不能包含空格了
输入: 1 2 3 4 5
2 3 4 5 6
while (cin >> m) {
a.push_back(m);
if (cin.get() == '\n') break;
}
while (cin >> n) {
b.push_back(n);
if (cin.get() == '\n') break;
}
char input[100];
do{
cin.get(input,100)
...
}while(input[0]!='\0')
图片摘自网络
#include
#include
#include
#include
#include
#include
using namespace std;
int main() {
vectorvalid_vec;//有效的字符串
vectorinvalid_vec;//无效字符串
char input[100];
do{// 判断是否 输入结束了
cin.getline(input, 100);
bool valid = true;
int i = 0;
do{//判断字符串是否结束了
charc = input[i];
if (!isalnum(c)) {
valid = false;
break;
}
i++;
} while (input[i] != '\0');//判断字符串是否结束了
if (!valid)
invalid_vec.push_back(input);
else
valid_vec.push_back(input);
} while (input[0] != '\0');//判断输入是否是空行,如果是,就结束了
// 去重valid_vec存储去重后的
setst(valid_vec.begin(), valid_vec.end());
valid_vec.assign(st.begin(), st.end());
//输出去重后的合法字符串
int nums_valid = valid_vec.size();
for (int i = 0; i < nums_valid-1; i++)
{
cout << valid_vec[i] << " ";
}
cout << valid_vec[nums_valid - 1]<