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。
提前致谢!
答案 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
等数据类型,如其中一条注释中所建议的那样。相反,请阅读整行或解析单元,然后进行解析。这使您的代码更具可读性,并简化了错误处理和调试。