如何使用 std::getline 来匹配预期的输入并读取变量部分

How do I use std::getline to match expected input and read a variable portion?

本文关键字:输入 读取 变量部 std 何使用 getline      更新时间:2023-10-16

如何使用std::getline读取具有常量部分和变量部分的输入。例如:

constant part:"I_love"

variable part:"cat, dog, donkey, bird....."

我通过编写以下内容尝试了以下代码: I_love cat

但我意识到"cat"不会在字符串Variable中,它会与constant part在一起,variable part将没有任何价值我想在字符串中cat Variable

请问谁能告诉我问题出在哪里?

std::string UserInput, Variable;
std::getline(std::cin,UserInput);
if (UserInput == "constant_part" + Variable)
{
    .....
}

提前谢谢。

不能向const char *添加std::string。但是,您可以使用operator+连接两个字符串,因此:

if (UserInput == ( std::string("constant_part") + Variable) )
getline可用于

读取所有内容(包括空格),直到文件结尾或分隔符字符的下一个实例,您可以将其指定为参数或保留为默认值""。 因此,您可以像这样使用它:

if (std::getline(std::cin, UserInput, ' ') && UserInput == "I_love" &&
    std::getline(std::cin, Variable))
    std::cout << "the animals loved are: " << Variable << 'n';

如果要逐个提取单个动物名称:

if (std::getline(std::cin, UserInput, ' ') && UserInput == "I_love")
{
    std::istringstream iss(line);
    while (std::cin >> skipws && std::getline(std::cin, animal, ','))
        std::cout << "someone loves their " << animal << 'n';
}

除了正确使用括号对表达式进行分组的明显问题之外,还有这样的解决方案:

if (UserInput == ("constant_part" + Variable))

将创建一个新的临时std::string并进行比较。.您可以通过查找constant part的长度,然后执行substr来改善这一点。

std::string UserInput, Variable;
std::getline(std::cin, UserInput);
//example...
auto LengthOfConstantPart = sizeof("constant part ")/sizeof(char);
//Then you simply do
Variable = UserInput.substr(LengthOfConstantPart);