问题1:输入为一行字符串被中间被一些空格隔开,要求提取这些被空格隔开的字符串.
方法:直接使用cin,因为cin遇到空格附,换行附,\0,EOF等会停止输入
string s;
while(cin>>s)
{
cout<<s<<endl;
}
问题2:输入为一行字符串被中间被一些空格隔开,要求提取整行字符到一个字符数组中
方法:使用cin.get(char* p,int pcount)或者cin.getline(char*p int pcount),第一个参数为存储的指针,第二个参数是输入的字符个数,要注意的一点是程序在遇到分隔符或到达文件结束之前,只会读入pcount-1个字符,第pcount个字符用null(0)代替.
char a[100];
cin.get(a,5);
//gets(a);这种方法也可以
int b=strlen(a);
int c=sizeof(a);
cout<<b<<c;
上述代码值得注意的一点是strlen判断的是从a[0]到a中第一个值为NULL(0)之前的的元素的个数,而sizeof判断的是整个数组的大小。
问题3:问题2中要用string存储字符串
string a;
getline(cin,a);
cout<<a<<endl;
值得注意的问题(1):输入流中的终结符问题,cin.get()当在头和尾部遇到终结符时,会直接返回null,在中间遇到终结符时,会将终结符留在输入流中,等待下一次cin.get()
char a[33]
cin>>n;
while(n--)
{
getchar();
cin.get(a,33);
}
上述代码中,必须要使用getchar()获取终结符,才能顺利输入字符串,再看下面代码
string a
cin>>n;
while(n--)
{
getchar();
getline(cin,a);
}
上面的代码也必须加上getchar();再看下面代码
string a
cin>>n;
while(n--)
{
cin>>a;
}
则不需要getchar(),因为cin会自动判断string类型