在刷题的时候,经常会遇到需要输入字符串的题目,有的要求保留空白符,有的不要求保留。
所以针对读取字符串做了如下总结:
1.cin
读取字符串,遇空格、TAB、回车结束
#include <iostream>
using namespace std;
int main()
{
char a[20];//也可以用string a;不过需要加上头文件<string>
cin>>a;
cout<<a;
return 0;
}

2.cin.get()
用法1: cin.get(字符变量名)接受一个字符
#include <iostream>
using namespace std;
int main()
{
char ch;
ch = cin.get();//或者是cin.get(ch)
cout<<ch;
return 0;
}

用法2:cin.get(字符数组名,接收字符数目)接受一个字符数组,不能是string定义的字符串,可以接受空白符
#include <iostream>
using namespace std;
int main()
{
char a[20];
cin.get(a,10);
cout<<a;
return 0;
}

注:输出为9个字符+1个‘/0’
3.cin.getline()
cin,getline(字符数组名,可以接受的字符个数,结束字符)接受一个字符数组(不能是string字符串),可以接受空白符
注:“结束字符”默认为'/0'
#include <iostream>
using namespace std;
int main()
{
char a[20];
cin.getline(a,10);
cout<<a;
return 0;
}

当结束字符不为默认字符时
#include <iostream>
using namespace std;
int main()
{
char a[20];
cin.getline(a,10,'a');
cout<<a;
return 0;
}

4.getline()
getline(cin,字符串名)接受一个字符串,可接受空白符,需包含#include<string>
#include <iostream>
#include <string>
using namespace std;
int main()
{
string a;
getline(cin, a);
cout<<a;
return 0;
}

总结:1.可以接受string字符串的只有cin>>和getline(cin, str),其他都只能接受字符数组,其中cin.get()还可以接受单个字符;
2.char a[]的字符串都以'/0'结束,所以输出的字符个数比要求的少一个,最后一个位置需要来存放'/0';
而string 的字符串结尾没有'/0'。
ps: 个人感觉string比较好用。
浙公网安备 33010602011771号