从 .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 < accounts_total && f>>account_name>>pin>>balance) do something with account_name, pin, and balance; count++
之类的内容查看 std::vector` 并制作 class
或 struct
以帮助跟踪每个条目 @987654325 @、pin
和 balance
。
【参考方案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 >> name >> pin >> balance
放入if
语句以确保读取成功吗?
我的导师要求我们用数组来做这件事,因为我们还没有学习对象/列表。
@Evanjbraun 正确的方法是使用std::list
或std::vector
(可能vector
会更快),但如果这是禁止使用的,您需要类似Account * array = new Account[accounts_total];
和后来的@987654330 @ 完成后将内存收起来。另一种选择是编写自己的vector
。棘手,但很有教育意义。以上是关于从 .txt 文件读取并输入到 parrel 数组 C++的主要内容,如果未能解决你的问题,请参考以下文章