cin对象的简单问题?

来源:百度知道 编辑:UC知道 时间:2024/04/28 03:54:12
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
____for(string s; cin>>s;) //
______cout<<s<<"_";
____system("PAUSE");
____return EXIT_SUCCESS;
}

当我从键盘输入 ni hao 回车后,显示成ni_hao_ 程序的执行步骤是怎么样的?当满足什么条件时执行cout<<s<<"_";语句啊? 存储在s对象中的字符串里的空格是怎么被替换成 _ 的?

不是string 中的空格被替换成了‘_’,而是当你用CIN输入字符时,编译器会根据的输入的是不是空格来判读是否输入结束。例如:
string s;
cin << s;
当你执行这段代码时,如果你的输入是
“ni hao”那么编译器只会将“ni”放入字符串s中,而hao则被“切掉”了。
当这段代码变成:
string s,ss; cin >>s >> ss;
cout<<s<<" "<<ss;
你输入“ni hao”,输出结果为“ni hao”。
现在就可以解释为什你的输出会把每个字串后边的空格“变成”“_”了。
如果想要让编译器不是按照空格而是按照换行来确定数是否输入完成,你可以使用如下语法:
getline(istream &s,string &s);
例如:getline(cin,s);

你打上空格和回车,就相当于告诉编译器到这个地方结束,下次输入的东西是另一个东西了,也就是说你输入的“ni空格hao回车”,被系统认为是“ni”,“hao”,所以先输出ni,然后紧跟着输出_,再输出下一个单词hao,紧跟着_。你没有清晰的明白string作为输入源的话结束的标志是什么。建议好好再看下参考书,很重要的。

你用string里面的replace就可以了