在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++怎么编写,各位大哥,我是新手,请教一下怎么写,或者直接写出来做为参考!

以下代码 VS2010 编译通过,运行结果正常

关键运用: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&gt;&gt; mobilenumber[i]&gt;&gt;seatnumber[i]&gt;&gt;firstname[i]&gt;&gt;lastname[i]; 你想要while (infile&gt;&gt; mobilenumber[i]&gt;&gt;seatnumber[i]&gt;&gt;firstname[i]&gt;&gt;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 &lt;= i &lt;= 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++中如何读取文本中的数据存储为数组变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据存储在动态二维数组中,该数组在 C++ 中的另一个结构中也使用的结构中声明

如何在 C++ 中使用静态变量在不同的类之间共享一个数组?

如何从 C++ 中的 hdf5 文件中读取数据块?

c++中数组和对象的数据是存储在栈内存还是堆内存?

C++ 炼气期之数组探幽

将基于文本的列数据存储到数组 C++ 中