一、带有空格的字符串输入
(一)C++篇
1. 针对字符数组而言
- 方法一 getline()
读入整行数据,使用回车键输入换行符来确定输入结尾。
调用方法:
cin.getline(str,len)
第一个参数存储输入行的数组名称
第二个参数是要读取的字符数
举个栗子:
int main()
{
char str[100];
cin.getline(str,111);
cout<<str<<endl;
return 0;
}
- 方法2 cin.get(str,len)
举个栗子:
int main()
{
char str[100];
cin.get(str,111);
cout<<str<<endl;
return 0;
}
两者都是读取一行输入,直至换行符
但是,getline() 将换行符丢弃,而get()将换行符保留在输入序列中
2. 对于string类
- 方法1 getline(cin,str)
举个栗子:
int main()
{
string str;
getline(cin,str);
cout<<str<<endl;
return 0;
}
(二) C语言篇
c语言输入使用scanf函数,但scanf默认输入碰到回车和空格是输入不同组之间的间隔和结束符号,所以输入带有空格,tab或者回车的字符串是不可以的,解决方法如下。
1. 利用正则表达式
利用格式符“%[] ”它的作用扫描字符串集合。scanf("%[^c]",str);
其中”c” 是一个具体的字符常量(包括控制符)。
举个栗子:
int main()
{
char *msg=NULL;
msg=(char *)malloc(100*sizeof(char));
scanf("%[^
]",msg);
printf("%s",msg);
return 0;
}
2. 使用gets()函数
gets()函数是以回车符作为结束符
本函数不建议使用,因为在codeblocks已经无法使用
二、先输入一个整数后,再输入一个带空格的字符串
int i=0;
string data;
cin>>i;
cin.get(); //这应该懂吧,读取换行符,因为换行符在你按回车时还在输入队列中
getline(cin,data); //正因为cin.get()将换行符读取了,这行代码可以读取一行,否则将直接读取换行符,这样子这一行的内容都存进data字符变量中
cout<<i<<endl<<data;
return 0;