在C/C++中,传统的输入流scanf(“%s”,&str) 和cin>>str,遇到空格会返回空格之前的字符串。但是在很多应用中,我们需要字符串中可以同时包含空格,那么前面的两种方法现在就不可用了,在C/C++中给我们提供了那些输入流处理方式呢。下面是我总结的几种常用的方法:
(1)gets(char *str)
需要包含头文件#include <stdio.h>
(2)scanf("%[^\n]]",str)
需要包含头文件#include <stdio.h>,这种方法需要对正则表达式有一定的理解,例如:scanf("%[a-z A-Z 0-9]",str)表示只匹配输入是大小写字母和数字。
(3)getline(cin,string str)
需要包含头文件#include <string>,因为getline是string类成员对象,例如string::getline,其中第一个参数要求是输入流对象的引用&istream。
(4)cin.getline(char *str, int maxnum)
需要包含头文件#include <iostream>,因为这里的getline是输入流的成员对象,如:istream::getline.
下面是测试用例代码:
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
int main()
{
char str[100];
string str1;
//cin>>str;
//scanf("%s", &str);
//printf("%s", str);
//scanf("%[a-z A-Z 0-9]",str);
//scanf("%[^\n]]",str);
getline(cin,str1);
//gets(str);
//cin.getline(str, 10);
cout<<str<<endl;
system("pause");
return 0;
}