我的任务是创建一个程序,将一种测量单位转换为另一种测量单位。因此,如果用户输入 5 千克,它会将其转换为等值的磅数。要求规定用户输入必须全部在一行中读取,并且输入中任何位置的任意数量的空格都不能消除功能。我的问题是:如果用户在实际的双“质量”值之间输入一堆空格,然后在测量单位(例如“短吨”)中的不同单词之间输入空格,我该如何消除空格以便它读起来只是“shorttonnes”? 到目前为止我的代码是:
double mass; string unit;
cout << "Enter mass: ";
cin >> mass;
cin.ignore();
cin >> unit;
if (unit == "short tonnes" || unit == "sh tn")
{
//convert to long tonnes
}
我的代码可以在输入双倍质量值之前忽略空格,并在输入字符串的第一部分之前忽略空格。但我不知道如何让我的程序将“short tonnes”读作“shorttonnes”(不管单词之间的空格数),以便我可以进行字符串比较并根据需要转换质量值。预先感谢您的帮助,请不要讨厌我,我正处于学习 C++ 的第一周。
最佳答案
再次向您道歉。编辑后,我认为我最初的评论是正确的。按照其他人的推荐使用 getline
获取行。然后将该行放入 std::istringstream
。使用 >>>
从 stringstream
中读取单词,并使用 +
运算符将它们连接起来,直到组合出您要查找的标记之一。 >>>
的默认行为是为您丢弃所有空格。
所以...
std::string line;
while (std::getline(cin, line)) // reads in a line
{
std::istringstream stream(line);
std::string spaceless;
std::string word;
while (stream >> word) // get words on the line without any whitespace
{
spaceless += word; // assemble without spaces
if (spaceless == "shorttonnes")
{
//do something with spaceless
}
else if (spaceless == "Someothertoken")
{
// do something else with spaceless
}
else if ( ... )
{
// rinse, repeat
}
}
}
这是一个简单的、精简的连接示例:https://ideone.com/hGLr6f
您可以使用其他技术来代替 if
/else if
链。字符串和函数指针的 std::map
,但这是另一个问题。
关于c++ - 如何在 C++ 中读取输入字符串,忽略空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50361660/