C ++:带有空格的cin到没有getline函数的字符串
Posted
技术标签:
【中文标题】C ++:带有空格的cin到没有getline函数的字符串【英文标题】:C++: cin with white spaces to strings without getline function 【发布时间】:2016-03-23 18:00:18 【问题描述】:我正在进行一个看起来像学生数据库的大学项目。 文本文件的每一行都遵循这个“模型”:
age ; full_name ; avg
我需要读取文本文件并将所有内容存储在结构向量中,如果名称只有一个单词,我可以这样做。
嗯,很明显,age 是一个 int,avg 是一个 double,但是全名呢?
我不能只使用file >> full_name;
,而full_name 是一个字符串,因为一旦它到达一个空格,它就会停止读取它。 getline()
函数会将所有内容存储在一个地方,所以我不知道该怎么做。
请与这个年轻的头脑分享你的知识x)
【问题讨论】:
Heavily related.std::getline
可以使用自定义分隔符,那些;
看起来可能会派上用场:)
确实是非常相似的问题。但我不明白解决方案是什么。我不想为名称使用多个字符串,因为它可以包含可变数量的单词。此外,重新排列文件不是一种选择。
@melak47 谢谢!我刚刚检查了它的完整语法,我将尝试使用分隔符。
@DanielMarques “确实非常相似的问题。但我不明白解决方案是什么。”没有/没有解决方案 i>,但my answer for using delimited input 朝着您需要的方向发展。
【参考方案1】:
正如许多其他人指出的那样,您可以使用 std::getline 来读取字符直到分隔符。
以这段代码的 sn-p 为起点:
int age;
std::string name;
double average;
// ... Open the file which stores the data ...
// then read every line. The loop stops if some of the reading operations fails
while ( input >> age &&
std::getline(input, name, ';') && // consume the first ;
std::getline(input, name, ';') && // read the name
input >> average )
// do whatever you need with the data read
cout << "age: " << age << " name: " << name << " average: " << average << '\n';
【讨论】:
以上是关于C ++:带有空格的cin到没有getline函数的字符串的主要内容,如果未能解决你的问题,请参考以下文章