GuguMelon's Blog

今天所做之事勿候明天,自己所做之事勿候他人。

0%

关于字符串处理的整理

写在前面

字符串是我们经常要处理的东西,今天在处理方面比如读入处理等方面做一个小小的总结。

读字符串之前

如果读字符串之前有读入数的操作,那么需要把其后的换行符给读入消去,$getchar()$即可。

整行读入字符串的方式

1
2
3
4
5
6
7
8
9
//C++标准string
string s;
getline(cin,s);
//char字符数组
char s[100];
scanf("%[^\n]%*c",s);
gets(s);
cin.get(s,100);
cin.getline(s,100);

整行读入原理解释

1
scanf("%[^\n]%*c",s);

​ $%[\qquad ]$是很有趣的参数,意义是读入一个字符集合,一旦遇到不在集合中的就停止,同时遇到^后面的字符也会停止,所以^\n就是遇到换行符停止,后面的%*c是为了把换行符读入,防止影响接下来的读入。

cin.get()和cin.getline()之区别

两者都是只支持$char*$字符数组。

我们知道读入时存在缓冲区这一说法,比如$cin$,在键盘输入结束后,将数据存入缓冲区m$cin$函数直接从缓冲区读取数据,所以如果缓冲区有残留数据,$cin$会直接读取。

问题的关键在于,$cin.get$()在一次输入结束后不会删除缓冲区的结束符,而$cin.getline$()会自动丢弃缓冲区字符。

1
2
3
cin.get(数组名,长度,结束符);
cin.getline(数组名,长度,结束符);
//其中,结束符默认为换行符

如果要用$cin.get()$读入多组数据,需要写成 $cin.get(数组名,长度).get()$。