我正在尝试使用fstream读取代码中的文本文件。该文本文件具有以下结构,
Main,Johnsons,4,4
Lake,Smiths,1,2
Orchid,Hendersons,3,8我正在尝试做以下几件事。
Neighborhood n1;
ifstream houses;
houses.open("houses.txt");
string line;
string street;
string family;
int house;
int rooms;
int colptr = 1;
while (houses.good()) {
getline(houses, line, ',');
switch (colptr) {
case 1: {
col1 = line;
colptr++;
break;
}
case 2: {
col2 = line;
colptr++;
break;
}
case 3: {
col3 = stoi(line);
colptr++;
break;
}
case 4: {
col4 = stoi(line);
colptr = 1;
House h(col1, col2, col3, col4);
n1.addHouse(h);
break;
}
default: {
break;
}
}
}House是一个使用(string,string,int,int)来构造房屋的类,Neighborhood类的方法addHouse()只是将房屋添加到房屋列表中。
代码抛出一个错误,因为它试图将字符串转换为int。我发现在4次迭代中,它会尝试将"4 Lake“转换成一个整数--这显然是做不到的。
如果将文本文件格式化为末尾的',‘,则代码可以工作,如
Main,Johnsons,4,4,除非这对我不起作用,因为我得到的文本文件总是和开头显示的一样。
提前谢谢你!
发布于 2020-12-06 08:23:39
您可以在一个嵌套循环中调用getline()两次。第一个读取输入通常是“逐行",第二个在std::stringstream对象的帮助下用逗号”,“拆分:
//...
while (houses.good()) {
getline(houses, line); //use default getline() - line by line
std::stringstream ss (line);
std::string word;
while (getline (ss, word, ',')) {
//... the rest of code
//...发布于 2020-12-06 08:22:03
您可以获取该行并在末尾添加,字符,然后获取单词。
while (houses.good()) {
std::istringstream input;
getline(houses, line);
line += ',';
input.str(line);
for (std::string token; getline(input, token, ','); ) {
// process words
}
}https://stackoverflow.com/questions/65163321
复制相似问题