如何使用 std::getline 来匹配预期的输入并读取变量部分
How do I use std::getline to match expected input and read a variable portion?
如何使用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);
相关文章:
- 读取文件并输入到矢量中
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 如何在C++中读取空格分隔的输入 当我们不知道输入的数量时
- 套接字读取后,我在缓冲区中看到意外输入
- 从标准输入读取文件后读取用户输入
- C++ 从标准输入读取文件名
- 从标准输入读取多个类型时出现问题
- 使用 fgets() 从键盘读取时从以前的输入读取换行符
- 从标准输入读取时zmq_poll不侦听信号
- 从超强的AndroidAudioIO输入读取缓冲区
- 如何实现将用户输入读取到提供的所有变量中的可变参数模板
- 如何使用重定向的标准输入读取文件,即cin(注意:不使用ifstream)
- 将空格分隔的输入读取到C++中的数组中
- Win32 - 从标准输入读取超时
- 从标准输入读取输入,并准备接收来自服务器的广播
- 终止将输入读取到int中的内容
- 如何从标准输入读取输入,直到按下空格或选项卡
- DirectX 11输入读取方法
- 将输入读取到动态大小的数组中