我正在尝试编写一个以特定方式获取用户输入的程序。 首先,我输入一个不包含空格的单词; 然后,我输入另一个可能包含空格的单词; 程序分别输出2个单词。
例如,我输入了#34;汤姆是一个懒惰的男孩" 然后程序输出"汤姆:一个懒惰的男孩"
这是我试图做的事情:
int main(){
string a;
cin >> a;
string b;
getline(cin, b);
cout << a << ":" << b<< endl;
}
我尝试在cin之后使用getline,但输出看起来像:&#34; Tom:一个懒惰的男孩&#34;
如果我输入&#34;汤姆(很多空格)一个懒惰的男孩&#34;然后它输出&#34;汤姆:(很多空间)一个懒惰的男孩&#34; 我想要不要那些空间。有更好的方法吗?
我看到有些方法需要在cin之后编辑字符串,但是我们可以在输入阶段解决问题吗?
答案 0 :(得分:1)
getline()
读取空格,如果要忽略前导空格,请尝试:
cin.ignore();
getline(cin, b);
编辑: 对不起,这确实是1个字符,这是另一种解决方案:
getline(cin, b);
string noLeadingWS = b.substr(b.find_first_not_of(' '),b.length()-b.find_first_not_of(' '));
cout << a << ": " << noLeadingWS<< std::endl;
答案 1 :(得分:1)
std::getline
函数不像正常输入操作符>>
那样跳过空格。你必须自己删除前导(以及可能的尾随?)空格。
删除前导空格可以先找到第一个非空白字符(例如std::find_if
),然后从该位置获取一个子字符串(使用std::string::substr
)。
或者如dyp所示,使用std::ws
。链接引用有一个很好的例子如何使用它。
答案 2 :(得分:0)
所以看起来你的程序只是抓住你在程序中放置的空间,你可以通过几种方式摆脱它!
你可以自己使用cin.get()逐字符串地输入输入,然后将它们添加到一个字符串中,直到你得到一个空格然后继续,但不要添加空格,直到你得到的东西为&n&n #39; ta space,然后使用你的getline,或者你可以继续你的自定义流媒体这一次寻找换行符!
您只需编辑生成的字符串即可轻松删除多余的空格,请查看substr()方法!