字符串的读取方式以及fgets的弊端
这里将字符串分为string型字符串和char型字符串。
1.char型可用cin, scanf, fgets, cin.getline来读取,并可用strlen获取长度
2.string型可用cin, getline来读取,并可用s.size()和s.length()以及通过c_str函数转换成char型并使用strlen获取长度。注意:string不能用scanf读取
printf输出string要用c_str函数
fgets
先来看一个程序
1 |
|
当输入”abcd”的时候,会输出什么?
当输入”abc”的时候,会输出什么?
当输入”ab”的时候,会输出什么?
点击查看答案
答案:都是3
首先, 字符串的末尾都会有’\0’来表示字符串的结束,我们设fgets的第二个参数为n,
当读取的字符数等于n时,fgets函数会自动截取到n-1,即最多读取n-1个字符,并在末尾添加’\0’;
当读取的字符数等于n-1时,fgets函数会读取全部字符,同样并在末尾添加’\0’;
当读取字符数小于n-1时,fgets函数会读取全部字符并读取回车符,再在末尾添加”\0”;
关键点:fgets函数不会过滤掉回车符’\n’!!!!!!!!!!!!!
所以当有空间时,就会将’\n’读入
1 |
|


getline 和 cin.getline
getline 用来读取string
getline(cin, s);
cin.getline用来读取 char型字符串
cin.getline(s, 10);
两者都能过滤回车符
getline的语法形式为:
getline(cin, s, ch);
第三个参数可省略,默认为’\n’,也可自定义截止字符
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 adomais's blog!
评论





