ACM 数据读取
作者:互联网
C++ 中数据读取
C++ 输入过程中,是把输入加载到缓冲区中,然后对缓冲区中的字符进行读取。cin
、cin.get()
、 cin.getline()
、geline()
四个函数虽然都能进行数据读取,但是它们对缓冲区内数据的处理方法是不同的。下面会介绍它们之间的区别。
cin
结束条件:[enter]
, [space]
, [tab]
处理方法:cin
输入从非 [enter]
,[sapce]
, [tab]
开始(丢弃),遇到 [enter]
,[space]
,[tab]
表示当前输入结束。
cin.get()
用法: char a = cin.get()
处理方法:从当前位置读取一个字符,存入 a
中。
读取一行数组
/**
* Sample Input
* 1 3 5 7 9
*/
// C
while (scanf("%d", &a) == 1)
{
/* code */
}
// C++
while (cin >> a)
{
/* code */
}
每次读取两个数
/**
* Sample Input
* 1 3 5 7
* Output
* -2
* -2
*/
int a, b;
// C
while(scanf("%d %d", &a, &b) == 2) printf("%d\n", a-b);
// C++
while(cin >> a >> b) cout << a-b << endl;
限定输入数量
/**
* Sample Input
* 2
* 1 5
* 10 20
* Output:
* 6
* 30
*/
ios::sync_with_stdio(false); // 让 cout cin 比 scanf 和 printf 更快
int n, a, b;
cin >> n;
while(n--) {
cin >> a >> b;
cout << a - b << endl;
}
以特定输入为结束标志
例如:以 0 0
作为结束标志
/**
* Sample Input
* 1 5
* 10 20
* 0 0
* Output:
* 6
* 30
*/
// C
int a, b;
while(scanf("%d %d", &a, &b) && (a !=0 && b != 0)) {
printf("%d\n", a+b);
}
// C++
while(cin >> a >> b && (a != 0 && b != 0)) {
cout << a + b << endl;
}
读取整行字符串
读取整行字符串不能使用 cin
, cin
会忽略 空格、回车符、制表符 等。
// 使用字符串
string buf;
getline(cin, buf);
// 使用字符数组
char buff[255];
cin.getline(buff, 255);
以空格为分割的数组
/** 数组以空格分割
* Sample Input
* 1 2 3 4 5
* 11 12 13 14 15
* 21 22 23 24 25
*/
// 只知道有三行,每列未知
vector<vector<int>> res(3);
for(int i = 0; i < 3; i++) {
int a;
while(cin >> a) {
res[i].push_back(a);
if(cin.get() == '\n')
break;
}
}
数组以 ',' 分割
/**
* 未知数组长度,用 ',' 隔开
* Sample Input
* 1,2,3,4,5,6,7
* 0,2,3,4,5,7,3
*/
vector<int> w;
vector<int> v;
string s1, s2;
cin >> s1 >> s2;
string tmp;
stringstream ss;
ss << s1;
while (getline(ss, tmp, ','))
{
w.push_back(stoi(tmp));
}
ss.clear();
ss << s2;
while (getline(ss, tmp, ','))
{
v.push_back(stoi(tmp));
}
标签:读取,int,cin,ACM,Sample,while,Input,数据 来源: https://www.cnblogs.com/loganxu/p/16590909.html