C/C++中输入带空格的字符串用法总结

在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.

      如果需要转化为char*,在C++中string封装了字符串的操作,总结一下,把string转化为字符数组或指针有一下三种方式:

(a)c_str()

          string str="hi,girls!";
          char *p=str.c_str();

(b)data()

          string str="hello";
          char *p=str.data();

(c)copy(p,len,start)

        string str="howareyou";
         char pStr[40];
         str.copy(pStr,7,0);      //7代表复制几个字符,0代表复制的位置
         *(pStr+7)='\0';            //这里要手动加上结束符

(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;	
}


版权声明:本文为zhouwei1221q原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。