我的程序需要读取文本文件,文本文件中的数据需要用逗号分隔(C ++)

时间:2012-11-18 19:14:04

标签: c++ binary-search-tree

我需要在搜索文本文件的搜索二进制树中插入数据。它在我在数据之间使用空格时起作用,但是如果我使用我想要的逗号则它不起作用。 例如,我希望我的文本文件看起来像这样:

New-York,c3,Luke
London,c5,Nathan
Toronto,c1,Jacob
  ...

我的文本文件现在看起来像这样:

New-York c3 Luke
London c5 Nathan
Toronto c1 Jacob
  ...

我还希望我的程序不要认为空间意味着它需要查看下一个数据,只能用逗号。

这就是我的代码的样子:

void fillTree( BinarySearchTree *b)
{
    ifstream file;
    file.open("data.txt");
    string city;
    string tag;
    string name;
    Person p;

    if(!file) {
        cout<<"Error. " << endl;
    }

    while(file >> city >> tag >> name)
    {
        p.setCity(city);
        p.setTag(tag);
        p.setName(name);
        cout << p.getCity() << " " << p.getTag() << " " << p.getName() << endl;
        (*b).insert(p);
    }
    file.close();
}

我需要在代码中更改什么才能使用commmas而不是空格?我觉得在文本文件中用逗号而不是空格看起来更整洁。 我很确定我需要在这段代码中编辑一些内容,但如果它可能在其他地方,请告诉我。

2 个答案:

答案 0 :(得分:1)

使用getline ( file, value, ',' );读取字符串,直到发生昏迷。

string value;
while(file.good())
{
    getline ( file, value, ',' );
    p.setCity(value);
    getline ( file, value, ',' );
    p.setTag(value);
    getline ( file, value, ',' );
    p.setName(value);
    cout << p.getCity() << " " << p.getTag() << " " << p.getName() << endl;
    (*b).insert(p);
}

答案 1 :(得分:0)

在C ++中,您可以重新定义流认为空间的内容。例如,您可以将其更改为',''\n'。要做的是使用带有修改后的imbue()方面的std::locale的{​​{1}}流。 facet的基础结构看起来有点涉及但是一旦这样就读取数据可以方便地使用输入运算符:

std::ctype<char>