最近因为找工作的事情,在刷一些编程题,也陆陆续续参加了一些笔试,一般编程中使用的语言是C++,因为编程题会有时间的限制,C++的效率最高,不容易出现超时的问题所以使用最多的语言就是C++。
在编程中,其中最容易遇到的问题就是输入问题。下面就讨论一下C++常用的一些输入函数。
概述
C++中几个输入函数有:
- cin
- cin.get()
- cin.getline()
- getline()
- gets()
- getchar()
cin
-
输入数字,以“回车”或者空格结束
1 2 3
int a,b; cin>>a>>b; // 按行输入对应的参数 cout<<a+b<<endl;
-
输入一个字符串,遇“空格”、“TAB”、“回车”都结束
1 2 3
char a[20]; cin>>a; cout<<a<<endl;
cin.get()
-
cin.get(str)
可以用来接收字符,str为字符数组名。1 2 3
char ch; ch=cin.get(); //或者cin.get(ch);只能获取一个字符 cout<<ch<<endl;
-
cin.get(str,n)
用来接收一行字符串,可以接收空格,str为字符数组名,n为接收字符数目。1 2 3
char a[20]; cin.get(a,20); //有些类似getline。可以输入多个单词,中间空格隔开。 cout<<a<<endl;
-
cin.get()
没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数目)的不足.
cin.getline()
-
接受一个字符串,可以接收空格并输出
1 2 3
char m[20]; cin.getline(m,5); //与上面基本相同。 cout<<m<<endl;
1
2
3
4
5
输入:jkljkljkl
输出:jkljkljkl
输入:jklf fjlsjf fjsdklf
输出:jklf fjlsjf fjsdklf
getline()
-
接受一个字符串,可以接收空格并输出,需包含
#include<string>
1 2 3
string str; getline(cin,str); cout<<str<<endl;
1
2
3
4
5
输入:jkljkljkl //VC6中有个bug,需要输入两次回车。
输出:jkljkljkl
输入:jkl jfksldfj jklsjfl
输出:jkl jfksldfj jklsjfl
gets()
-
接受一个字符串,可以接收空格并输出,需包含
#include<string>
1 2 3
char m[20]; gets(m); //不能写成m=gets(); cout<<m<<endl;
1
2
3
4
5
输入:jkljkljkl
输出:jkljkljkl
输入:jkl jkl jkl
输出:jkl jkl jkl
1
2
3
4
5
6
7
8
9
10
11
// 多维输入
char m[3][20];
for(int i=0;i<3;i++)
{
cout<<"\n请输入第"<<i+1<<"个字符串:"<<endl;
gets(m[i]);
}
cout<<endl;
for(int j=0;j<3;j++)
cout<<"输出m["<<j<<"]的值:"<<m[j]<<endl;
getchar()
-
/接受一个字符,需包含
#include<string>
1 2 3
char ch; ch=getchar(); //不能写成getchar(ch); cout<<ch<<endl;
1
2
3
4
输入:jkljkljkl
输出:j
//getchar()是C语言的函数,C++也可以兼容,但是尽量不用或少用;
常用的应用
-
输入单个数字
1 2
int a; cin >> a;
-
输入多个数字
1 2 3 4 5 6 7 8 9 10 11 12 13 14
// 默认是空格或者回车键为间隔 int a, b; cin >> a >> b; // 以逗号隔开的多个数字输入 int n, m; cin >> n; } if (cin.get() == ',') { cin >> m; }
-
输入一维数组(默认以空格为间隔),
#include <vector>
1 2 3 4 5
vector<int> arr(n, 0); for (int i = 0; i < m; i++){ cin >> arr[i]; }
-
输入二维数组(默认以空格为间隔),
#include <vector>
1 2 3 4 5 6 7
vector<vector<int>> arr(m, vector<int>(n, 0)); for (int i = 0; i < m; i++){ for (int j = 0; j < n; j++){ cin >> arr[i][j]; } }
-
以
,
为间隔的输入数组1 2 3 4 5 6 7 8 9 10 11
// 二维数组,以逗号为间隔 vector<vector<int>> S(n, vector<int>(m, 0)); for (int i = 0; i < n; i++){ cin >> S[i][0]; for (int j = 1; j < m; j++){ if (cin.get() == ',') { cin >> S[i][j]; } } }
-
输入不定长的数组(检测回车键)
1 2 3 4 5 6 7 8 9 10 11 12
// 定义二维数组 vector<vector<int>> F(n, vector<int>(n, -1)); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { int temp; cin >> temp; F[i][j] = temp; if (cin.get() == '\n') break; } }
-
输入字符串
1 2 3 4
// 已知字符串的长度,注意最后一位是\0 char a[21]; cin >> a; cout << a << endl;
输入的时候需要加入越界检测如下,需要
0<=n<=100
。
1
2
3
if ((n < 0) || (n > 100)) {
return 0;
}