仔细分析下面程序
#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个字符输出;