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函数的字符串的主要内容,如果未能解决你的问题,请参考以下文章

带有接受参数的构造函数的 C# Singleton

Java中啥函数可以读取字符串中的空格

C 预处理器宏参数在末尾带有空格以进行连接?

带有类但没有 Mixins 的 Javascript 中的组合模式?

C++ 回调函数到 C#

C ++将具有重载构造函数的对象添加到另一个对象