首页 > 解决方案 > 尝试从每个预期数据之间有多个空格的文件中读取和存储数据

问题描述

这是关于我如何读取和存储数据的简单代码。我有一个文本文件,在文本文件中是我想要传递给number和的数据text。如果文本文件包含诸如2存储到并且HelloWorld1存储到之类的文本2 HelloWorld1,则代码运行良好。numbertext

但是如果txt文件中的文字是这样的,2 Hello World 1Hello、World和1之间有空格呢?我的问题是是否可以将2存储在中number,将Hello World 1存储在text. 我明白,由于空格,因此只有2Hellonumber并分别存储在两者text中。有没有办法克服这个问题?

using namespace std;
int main(){

    ifstream theFile("key.txt");

    int number;
    string text;

    while(theFile>>number>>text){
        cout<<number<<" and "<<text<<endl;
    }
}

标签: c++fstream

解决方案


您对默认的流运算符 >> 不走运(如果确实是您的情况)。

1:了解格式

前进的方向是了解从您的帖子判断您有些不确定的格式。

2:使用最好的工具来完成工作

之后,您可以为工作选择正确的工具。这可能涉及:std::getline 和 handpassing,可能使用(在你的情况下,相当简单)、boost::spirit、标记化技术、boost::string_algo、lex/bison 等等。我要补充一点,自定义流运算符功能(如果可能)很少是直接的选择。

3:设计您的格式以匹配

作为了解格式的替代方法,如果您可以设计它,那就更好了。如果您有记录样式格式,处理带空格的字符串的一种简单方法是将字符串放在最后 - 然后将每条记录放在一行上。这样,您可以首先使用例如查看每一行。std::getline然后只使用流运算符来完成其余的操作 - 知道字符串将排在最后。其他分隔符(除了换行符)当然也是可行的。


推荐阅读