C/C++带有空格的字符串输入

一、带有空格的字符串输入

(一)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("%[^\n]",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;
posted @ 2018-03-15 21:09  Bryce1010  阅读(1053)  评论(0编辑  收藏  举报