作业需求:如何从文件读取数据到三个并行数组?
作业:读取文件数据到三个数组中
看起来你正在完成一个读取文件数据并拆分到对应数组的作业,我来帮你完善这个实现~
需求回顾
- 要处理的文件包含3列数据:
- 字符串类型的国家代码(2位字符)
- 整数类型的人口数
- 字符串类型的国家全称(可能包含空格)
- 需要将这三列分别读取到三个对应类型的数组中
文件内容示例
AU 20090437 Australia BR 186112794 Brazil BU 7262675 Bulgaria CA 32805041 Canada CN 1306313812 China DO 8950034 Dominican Republic
代码实现思路与完整示例
你已经写了函数的开头void readCntrData(string [], int []...,这里我基于C++给出完整的实现,核心是注意国家全称可能包含空格,不能直接用cin读取,需要用getline配合处理:
#include <iostream> #include <fstream> #include <string> using namespace std; // 假设我们提前知道最多有多少个国家,或者可以先统计行数 const int MAX_COUNTRIES = 100; void readCntrData(string countryCodes[], int populations[], string countryNames[], int& count) { ifstream inputFile("countries.txt"); // 替换成你的文件名 if (!inputFile.is_open()) { cerr << "无法打开文件!" << endl; count = 0; return; } count = 0; string code; int pop; string name; // 先读取国家代码和人口,再读取剩余的国家名称 while (inputFile >> code >> pop) { // 忽略读取代码和人口后留下的换行符 inputFile.ignore(); // 读取整行作为国家名称(包含空格) getline(inputFile, name); // 将数据存入数组 countryCodes[count] = code; populations[count] = pop; countryNames[count] = name; count++; if (count >= MAX_COUNTRIES) { cerr << "数组容量不足,已停止读取更多数据!" << endl; break; } } inputFile.close(); } // 测试用例 int main() { string codes[MAX_COUNTRIES]; int pops[MAX_COUNTRIES]; string names[MAX_COUNTRIES]; int count; readCntrData(codes, pops, names, count); // 输出读取到的数据验证 for (int i = 0; i < count; i++) { cout << "代码:" << codes[i] << " | 人口:" << pops[i] << " | 名称:" << names[i] << endl; } return 0; }
关键注意点
- 处理包含空格的国家名称时,不能直接用
cin >> name,因为cin遇到空格就会停止读取,所以要用getline来读取整行 - 读取完
code和pop后,需要用inputFile.ignore()跳过它们后面的换行符,否则getline会读取到空行 - 建议传入一个
count参数来记录实际读取到的国家数量,避免数组越界
内容的提问来源于stack exchange,提问作者Mattew1994
相关产品推荐
相关产品推荐

