C++cin处理空格问题

仔细分析下面程序

 #include<iostream>
using namespace std;
#include<string>

int main()
{
string str="jack bullshit jack";

{
string bullshit="bullshit";
string bush="bush";
size_t pos=str.find(bullshit,0);
size_t length=8;
if(pos!=string::npos)
str.replace(pos,length,bush);
cout<<str;
}
}

结果为jack    bush          jack; 结果正确,但想要用cin输入字符串时,结果却令你想的不一样:

#include<iostream>
using namespace std;
#include<string>

int main()
{
string str;
while(cin>>str)

{
string bullshit="bullshit";
string bush="bush";
size_t pos=str.find(bullshit,0);
size_t length=8;
if(pos!=string::npos)
str.replace(pos,length,bush);
cout<<str;
}
}

输入jack    bullshit  jack

结果jackbushjack,为什么空格不见了?

cin接收输入时,:>> 是会过滤掉不可见字符(如 空格 回车,TAB 等);从第一个非空白符开始读,知道空白符或文件结束为止

如果程序如下:

int main()
{
string str;
while(cin>>noskipws>>str)

{

cout<<str;

}
}


input : jack      bullshit          bull

output:jack press any key to continue;是不会循环的。

怎么才能接受一个带空格的字符串???

可以用getline:

#include <iostream>
#include <string>
using namespace std;
int main()
{
string sLine;
getline(cin,sLine);
cout << "your string is:\m" << sLine << endl;
}

input:  jack      bullshit        jack        ^z(ctrl+z);

output:jack              bullshit                        jack        会保留空格

、cin.getline()   // 接受一个字符串,可以接收空格并输出

#include <iostream>
using namespace std;
main ()
{
char m[20];
cin.getline(m,5);
cout<<m<<endl;
}

输入:jkljkljkl
输出:jklj

接受5个字符到m中,其中最后一个为'\0',所以只看到4个字符输出;


 

原文地址:https://www.cnblogs.com/youxin/p/2410730.html