从 .txt 文件读取并输入到 parrel 数组 C++

Posted

技术标签:

【中文标题】从 .txt 文件读取并输入到 parrel 数组 C++【英文标题】:Reading from .txt file and inputting into parrel arrays C++ 【发布时间】:2018-03-20 01:02:00 【问题描述】:

这是文本文件。

4

MB-1111-1111 1111 222.22

MB-2222-2222 2222 333.33

B1-3333-3333 3333 444.44

4444 4444 555.55

顶部的 4 是帐户总数。 以下每一行按以下顺序排列:账户名称/PIN/余额。

我如何读取这个 .txt 文件并将这些值中的每一个放入一个数组中?

这是我到目前为止所拥有的,但我完全迷失了。

#include <iostream>
using namespace std;

int readAccts() 
    ifstream f;
    int accounts_total, max=99999.99, pin, balance;
    char account_name;
    f.open("accounts.txt");
    if (!f.fail()) 
        f >> accounts_total;
        f >> account_name;

        f.close();
        return account_name;
    
    else 
        cout << "Error reading accounts!" << endl;
        accounts_total = -1;
        f.close();
        return accounts_total;
        
    
    return accounts_total;

【问题讨论】:

你需要一个循环,直到它无法读取 int count = 0; while ( count &lt; accounts_total &amp;&amp; f&gt;&gt;account_name&gt;&gt;pin&gt;&gt;balance) do something with account_name, pin, and balance; count++ 之类的内容查看 std::vector` 并制作 classstruct 以帮助跟踪每个条目 @987654325 @、pinbalance 【参考方案1】:

我会在这里提出一些建议。

不要使用并行数组 => 最好使用类或结构 将对象存储在列表中 您根本不需要存储条目数

假设这是filename.txt

MB-1111-1111 1111 222.22

MB-2222-2222 2222 333.33

B1-3333-3333 3333 444.44

4444 4444 555.55

// create a struct to hold the data
struct Account 
    std::string Name;
    std::string Pin;
    double Balance;


// open the file
std::ifstream input( "filename.txt" );
// create a list for all accounts
std::list<Account> Accounts;
// iterate over each line
for( std::string line; getline( input, line ))

    // maybe not neccessary but I'm not sure because of the belance and the casting
    std::string name, pin, balance;
    std::stringstream linestream(line);
    // get the line values
    if(linestream >> name >> pin >> balance) 
        Account account;
        // set values for object
        account.Name = name;
        account.Pin = pin;
        // string to double
        account.Balance = std::stod(balance);
        // store account in list
        Accounts.push_back(account);
    


当你真的需要数组时:

4

MB-1111-1111 1111 222.22

MB-2222-2222 2222 333.33

B1-3333-3333 3333 444.44

4444 4444 555.55

// open the file
std::ifstream input( "filename.txt" );
std::string firstLine;
getline( input, firstLine );
// get the number of following lines
int lines = std::stoi(firstLine);
// create arrays with the capacity of lines
std::string* Names = new std::string[lines];
std::string* Pins = new std::string[lines];
double* Balances = new double[lines];

// iterate over each line
int ctr = 0;
for( std::string line; getline( input, line ))

    std::string name, pin, balance;
    std::stringstream linestream(line);
    // get the line values
    if(linestream >> name >> pin >> balance) 
        // store values in corresponding arrays
        Names[ctr] = name;
        Pins[ctr] = pin;
        Balances[ctr] = std::stod(balance);
        // increment counter for next array position
        ctr++;
    

// do something cool with the values
// ...

// free memory after you'r done
delete[] Names;
delete[] Pins;
delete[] Balances;

【讨论】:

时髦。现在我可以说服您将linestream &gt;&gt; name &gt;&gt; pin &gt;&gt; balance 放入if 语句以确保读取成功吗? 我的导师要求我们用数组来做这件事,因为我们还没有学习对象/列表。 @Evanjbraun 正确的方法是使用std::liststd::vector(可能vector 会更快),但如果这是禁止使用的,您需要类似Account * array = new Account[accounts_total]; 和后来的@987654330 @ 完成后将内存收起来。另一种选择是编写自己的vector。棘手,但很有教育意义。

以上是关于从 .txt 文件读取并输入到 parrel 数组 C++的主要内容,如果未能解决你的问题,请参考以下文章

c语言 如何读取中文字符串

如何用VBS逐行读取文本文件的内容,并输入变量

java io怎么读取文件并输出到控制台上?

在 C++ 中用于在函数中使用数组,其中使用 ifstream 将数据从 .txt 文件输入到数组中

DELPHI中逐行读取并复制

java 按行读取txt文件并存入数组