在C++中如何读取文本中的数据存储为数组变量?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C++中如何读取文本中的数据存储为数组变量?相关的知识,希望对你有一定的参考价值。
在C++中如何读取文本中的数据存储为数组变量?
文本中有两行
20100416-067 1,2,3,4,5
20100416-066 2,3,4,5,6
要求把后面的1,2,3,4,5和2,3,4,5,6存储到数组,用C++怎么编写,各位大哥,我是新手,请教一下怎么写,或者直接写出来做为参考!
关键运用:std::fstream 标准库对象;std::stringstring 标准库对象
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
int main()
char *path = "S:/1.txt"; // 这里填写你的文件路径,用‘/’或者‘\\’
std::ifstream ifile(path); // 打开文件
std::string line; // 用于存放从文件读取的每一行
int arr1[5], arr2[5]; // 分别存放读取到的 1,2,3,4,5 和 2,3,4,5,6
if (ifile) // 检查文件是否打开成功
char comma; // 用于过滤掉 1,2,3,4,5 中的‘,’
std::string pfx; // 用于过滤掉每行前面的字符串
getline(ifile, line); // 读取文件第一行
std::istringstream instr1(line); // 将第一行绑定给 istringstream 对象
instr1 >> pfx; // 过滤第一行前面的字符串
for (int x = 0; x != 4; ++x)
instr1 >> arr1[x] >> comma;
instr1 >> arr1[4]; // 读取数据存入数组,并过滤掉‘,’
getline(ifile, line); // 第二行读取开始,步骤同上
std::istringstream instr2(line);
instr2 >> pfx;
for (int x = 0; x != 4; ++x)
instr2 >> arr2[x] >> comma;
instr2 >> arr2[4];
else
std::cout << "打开文件错误!" << std::endl;
return EXIT_FAILURE;
// 下面是显示读取结果
for (int x = 0; x != 5; ++x)
std::cout << arr1[x] << " ";
std::cout << std::endl;
for (int x = 0; x != 5; ++x)
std::cout << arr2[x] << " ";
std::cout << std::endl;
return 0;
=========
运行结果:
1 2 3 4 5
2 3 4 5 6
Press any key to continue . . . 参考技术A 楼上的大叔真勤劳,反正注意筛去字符串前的和后面的逗号即可。
如何在 C++ 中将文本文件输入转换为数组
【中文标题】如何在 C++ 中将文本文件输入转换为数组【英文标题】:How do i convert a text file input to an array in c++ 【发布时间】:2020-04-13 15:54:44 【问题描述】:您好,我有一个格式为的文本文件 电话号码 门牌号码 名字 姓氏
我正在尝试读取所有数据并将其存储在一个数组中。我已经使用了下面的代码。但它只读取第一行数据。谁能帮助我为什么会这样。
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string.h>
#define Size 200
unsigned long long int mobilenumber[Size];
char seatnumber[Size][4];
char firstname[Size][30],lastname[Size][30];
using namespace std;
int main()
//delcares the files needed for input and output//
ifstream infile;
ofstream outfile;
infile.open("reservations.txt",ios::in);
//opens files needed for output//
outfile.open("pricing.txt");
int i=0;
if (infile.is_open())
infile>> mobilenumber[i]>>seatnumber[i]>>firstname[i]>>lastname[i];
i++;
numberofbooking++;
infile.close();
for(int i=0;i<=numberofbooking;i++)
cout<< mobilenumber[i]<<" "<< seatnumber[i]<<" "<< firstname[i]<<" "<< lastname[i];
return 0;
提前致谢
【问题讨论】:
你需要一个循环来读取比第一行更多的内容。而不是infile>> mobilenumber[i]>>seatnumber[i]>>firstname[i]>>lastname[i];
你想要while (infile>> mobilenumber[i]>>seatnumber[i]>>firstname[i]>>lastname[i]) i++; numberofbooking++;
谢谢,成功了:)
我没有发布答案,因为这是一种非常常见的问题。我预计会有重复。
【参考方案1】:
它只读取一行数据的原因是因为这就是你告诉它要做的所有事情。这里:
...
if (infile.is_open())
infile>> mobilenumber[i]>>seatnumber[i]>>firstname[i]>>lastname[i];
i++;
numberofbooking++;
...
这将运行一次,我认为你的意思是一个while循环:
while (infile>> mobilenumber[i]>>seatnumber[i]>>firstname[i]>>lastname[i])
i++;
numberofbooking++;
只要0 <= i <= 199
,这将做你想做的事,如果i
超出该范围,那么你将得到未定义的行为。
【讨论】:
【参考方案2】:假设您的数据文件中的数据不超过 200 条,否则您的程序将失败。
您只从文件中读取一次,因此只获取第一行数据。 您需要从文件变红直到 EOF。在 if(infile.is_open()) 中添加一个 while 循环。阅读直到 EOF,如下所示。
if (infile.is_open())
while (infile >> mobilenumber[i] >> seatnumber[i] >> firstname[i] >> lastname[i])
cout << "Reading file" << endl;
i++;
numberofbooking++;
除了索引之外,我没有看到 i++ 的任何好处。我认为您也可以使用 numberofbooking 进行索引。
每当您遇到此类问题时,请尝试添加日志以检查正在发生的事情或使用调试器。希望这会对你有所帮助。
【讨论】:
@drescherjm 是有道理的。根据建议编辑。以上是关于在C++中如何读取文本中的数据存储为数组变量?的主要内容,如果未能解决你的问题,请参考以下文章