写在前面
字符串是我们经常要处理的东西,今天在处理方面比如读入处理等方面做一个小小的总结。
读字符串之前
如果读字符串之前有读入数的操作,那么需要把其后的换行符给读入消去,$getchar()$即可。
整行读入字符串的方式
1 | //C++标准string |
整行读入原理解释
1 | scanf("%[^\n]%*c",s); |
$%[\qquad ]$是很有趣的参数,意义是读入一个字符集合,一旦遇到不在集合中的就停止,同时遇到^后面的字符也会停止,所以^\n就是遇到换行符停止,后面的%*c是为了把换行符读入,防止影响接下来的读入。
cin.get()和cin.getline()之区别
两者都是只支持$char*$字符数组。
我们知道读入时存在缓冲区这一说法,比如$cin$,在键盘输入结束后,将数据存入缓冲区m$cin$函数直接从缓冲区读取数据,所以如果缓冲区有残留数据,$cin$会直接读取。
问题的关键在于,$cin.get$()在一次输入结束后不会删除缓冲区的结束符,而$cin.getline$()会自动丢弃缓冲区字符。
1 | cin.get(数组名,长度,结束符); |
如果要用$cin.get()$读入多组数据,需要写成 $cin.get(数组名,长度).get()$。