如何从txt文件中访问其他逗号分隔值。 C ++

时间:2016-03-19 14:22:55

标签: c++ arrays string stringstream

ifstream f("events.txt");
if (f.is_open())
{
    string l,t;
    string myArray[5];
    int i = 0;
    while (getline(f, l))
    {
        getline(stringstream(l), t, ',');
        cout << t << endl;
        myArray[i] = t;
        cout << myArray[i] << endl;
        i = i + 1;
    }

所以我有一个名为'events.txt'的文件,其中包含:

An angry orc hits you with his weapon!,-50
A mage casts an evil spell on you!,-20
You found a health potion!,25
An enemy backstabs you from the shadows!,-40
You got eaten by a Dragon!,-1000

到目前为止,程序的这一部分将句子打印到逗号并将其存储到数组中。 我的问题是我也希望以某种方式访问​​该号码并将其存储到另一个阵列中或在事件发生时使用它,因为它将用于降低玩家HP。

提前致谢!

1 个答案:

答案 0 :(得分:0)

一种简单的方法:

定义用于存储数据的结构:

struct Event {
    std::string message;
    int number;
}

(不要将这两个项目存储在不同的数组中,它们属于一起。)

创建此结构的向量并将项添加到其中:

std::vector<Event> events;
while (getline(f, l)) {
    size_t pos = l.find(',');
    Event e;
    e.message = l.substr(0, pos);
    e.number = std::stoi(l.substr(pos+1));
    events.push_back(e);  
}

但是,假设字符串只有一个逗号。如果您想要更灵活,请使用std::strtok或正则表达式。

另一个建议:将I / O与解析分开。不要尝试直接从输入流中读取int等数据类型,如其中一条注释中所建议的那样。相反,请阅读整行或解析单元,然后进行解析。这使您的代码更具可读性,并简化了错误处理和调试。