我需要从文本文件中读取一些行(运行时将知道行数),但示例可能是这样的:
Forecast.txt:
Day 0:S
Day 3:W
Day 17:N
我的想法是创建一个我做过的课:
class weather
{
int day;
char letter;
};
然后按如下方式创建类的向量:
vector<wather>forecast;
现在这是我遇到的问题。所以我想我会使用while循环吗?
id使用我的ifstream读取信息,并使用字符串保存正在读取的信息。
我想做的是在每一行中读取并提取天数,因此在此示例中为0、3和15,并得到字母S,W,N,并将其存储在类的向量中。
我想知道是否有办法做到这一点?我可能会遇到这个错误,因此请原谅我是C ++的新手,并设法弄清楚这一点。
感谢您的帮助!
答案 0 :(得分:2)
您可以使用std::istringstream
来解析每一行,例如:
#include <sstream>
while (getline(in_s1, lines2))
{
istringstream iss(lines2);
string ignore1; // "Day"
char ignore2; // ":"
forecast f;
if (iss >> ignore1 >> f.day >> ignore2 >> f.letter)
weather.push_back(f);
}
或者,您可以使用std::regex
和related classes来解析每一行。
答案 1 :(得分:1)
istringstream
和>>
运算符可能是最简洁的C ++方法。如果您希望减少对流魔术的依赖,而更加明确一些,则可以find
所需的标记,然后直接从字符串中提取它们。
类似这样的东西:
while (getline(in_s1, lines2))
{
size_t startPos = lines2.find(' '); //get position of the space before the day
size_t endPos = lines2.find(':', startPos); //get position of the colon after the day
string day = lines2.substr (startPos+1, endPos-startPos-1); //extract the day
forecast f;
f.day = stoi(day); //stoi only supported since C++11, otherwise use atoi
f.letter = lines2[endPos+1];
weather.push_back(f);
}