[英]Ignore tabs and line breaks in user input using getline
我正在编写一个程序,该程序使用getline
获取用户输入(我必须使用getline
),然后将其吐回到屏幕上。 还应该再次询问输入是否为空白。 我在处理具有多个换行符和制表符的输入时遇到麻烦。
我已经知道它几乎可以正常工作了,但是它已经循环了几次,我不知道该如何解决/做得更好。 这是代码:
string name;
while(true)
{
cout << "What is your name?" << endl;
getline(cin, name, '\n');
if (!name.empty())
{
break;
}
}
cout << "Hello " << name << "!" << endl;
return 0;
这是输入:
\n
\n
John\n
Doe\n
我想要的输出应该看起来像这样:
What is your name?
Hello John Doe!
我的输出如下所示:
What is your name?
What is your name?
What is your name?
Hello John!
我可能不理解您的要求,但是如果您要做的只是在分开的行中收集用户的姓氏和名字(而忽略任何选项卡),则可以这样做。
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
std::string first;
std::string last;
std::cout << "What is your name?\n";
while (first.empty())
{
std::getline(std::cin, first);
// remove all tabs from input
first.erase(std::remove(first.begin(), first.end(), '\t'), first.end());
}
while (last.empty())
{
std::getline(std::cin, last);
// remove all tabs from input
last.erase(std::remove(last.begin(), last.end(), '\t'), last.end());
}
std::string name = first + " " + last;
std::cout << "Hello, " << name << "!\n";
return 0;
}
您的用户将被允许点击返回/输入和制表符,直到他们发狂为止。 直到std::getline()
得到一些非制表符的输入,才有多少换行符或制表符发生。 从您的问题来看,这似乎是您想要的。 您可以找到有关STL算法的更多信息,该算法用于通过std::remove
在此处删除选项卡。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.