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

How to access other comma separated values from a txt file. C++

本文关键字:其他 分隔 C++ 文件 何访问 访问 txt      更新时间:2023-10-16
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。

提前感谢!

一个简单的方法:

定义一个结构来存储数据:

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等数据类型,如其中一个注释中所建议的那样。相反,读取整行或任何解析单元,然后执行解析。这使代码更具可读性,并简化了错误处理和调试。

相关文章: