ACM-ICPC中常用的字符串输入,更新中, 返回值等等的遇到后补充……

scanf

读取字符串,到空格等结束

1
scanf("%s", str);

gets

读取一行

1
gets(str);

因为不安全,gets已经停用

fgets

从stdin(或文件)中读入一行不超过n-1的字符

1
2
3
4
5
6
7
8
9
#include<cstdio>

int main()
{
char str[100];
fgets(str, 5, stdin);
puts(str);
return 0;
}

输入

abcdefg

输出

abcd

空格也读入, 回车也读入

1
2
3
4
5
6
7
8
9
#include<cstdio>

int main()
{
char str[100];
fgets(str, 5, stdin);
puts(str);
return 0;
}

输入

a b c

输出

a b c

(换行)

未读完的会留在输入队列中,留着下一次读

1
2
3
4
5
6
7
8
9
10
11
#include<cstdio>

int main()
{
char str[100];
fgets(str, 5, stdin);
puts(str);
fgets(str, 5, stdin);
puts(str);
return 0;
}

输入

abcdefghijklmn

输出

abcd

efgh

cin

cin >>

读到空格结束

1
cin >> str;

cin.get

读取一个字符

读取一个字符,会读入空格回车

1
2
3
4
5
6
7
8
9
int main()
{
char a;
char b;
a=cin.get();
cin.get(b);
cout<<a<<b<<endl;
return 0;
}

输入

a

b

输出

a

(空行)

读取一行

读取一行不超过n-1的字符

空格读入不截断

可选第三个参数

1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;

int main()
{
char array[5];
cin.get(array,5);
cout << array << endl;
return 0;
}

输入

ab cd ef

输出

ab c

读到第三个参数结束(不读入第三个参数,将其留在缓存区)

1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;

int main()
{
char array[5];
cin.get(array, 5, 'b');
cout << array << endl;
return 0;
}

输入

abcde

输出

a

cin.getline

读取一行(包括空格,但不读取回车)不超过n-1个字符

可选第三个参数,读取到第三个参数结束(不读取此参数,并从缓存区丢弃这个值)

样例见cin.get

cin.get和cin.getline区别

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
int main()
{
char array[5];
cin.get(array, 5, 'b');
cout << array << endl;
cin.get(array, 5);
cout << array << endl;
return 0;
}

输入

abcde

输出

a

bcde (保留b)

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
int main()
{
char array[5];
cin.getline(array, 5, 'b');
cout << array << endl;
cin.get(array, 5);
cout << array << endl;
return 0;
}

输入

abcde

输出

a

cde (丢弃b)

cin各种读入对比

delim指cin.get和cin.getline的第三个参数,即要跳过的字符

语句 是否会被空格截断 是否读入delim或者回车 读取范围
cin >> 读到空格
cin.get 读到一行不超过n-1个字符或读到delim
cin.getline 读到一行不超过n-1个字符或读到delim

后记

未完待续……