C++ 如何读入文件并将该文件排序为不同类型的数据,所有数据都存储在结构中的特定数组中
我需要能够读入(第一个数字是指身份证号码,后面是交易,制作银行对账单代码,d表示存款,w表示取款,后面的数字是金额): 并将其排序到不同的数组中,所有数组都存储在一个结构中。我尝试过字符串流和其他各种我想的东西,我就像C++中的精通,在第一年的课程中是具体的。 这是我到目前为止的代码,第一组读入正常工作,但第二组无法正常工作:C++ 如何读入文件并将该文件排序为不同类型的数据,所有数据都存储在结构中的特定数组中,c++,visual-c++,C++,Visual C++,我需要能够读入(第一个数字是指身份证号码,后面是交易,制作银行对账单代码,d表示存款,w表示取款,后面的数字是金额): 并将其排序到不同的数组中,所有数组都存储在一个结构中。我尝试过字符串流和其他各种我想的东西,我就像C++中的精通,在第一年的课程中是具体的。 这是我到目前为止的代码,第一组读入正常工作,但第二组无法正常工作: #include<iostream> #include<fstream> #include<string> #include<s
#include<iostream>
#include<fstream>
#include<string>
#include<sstream>
using namespace std;
struct PersonAcct {
int acct_num[5];
string name[5];
double acct_bal[5];
};
struct PersonTrans {
int acct_num[5];
double trans[20];
char d_p[20];
};
int main() {
ifstream ifacc("accounts.txt");
PersonAcct p;
if (ifacc.is_open()) {
for (int i = 0; i <= 4; i++) {
ifacc >> p.acct_num[i];
ifacc >> p.name[i];
ifacc >> p.acct_bal[i];
}
}
ifacc.close();
ifstream iftrans;
iftrans.open("transactions.txt");
PersonTrans q;
string line,line2,line3,line4,line5;
if (iftrans.is_open()) {
int counter = 0;
while (getline(iftrans,line)) {
cout << line << endl;
counter++;
}
}
return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
结构人物角色{
国际账户数量[5];
字符串名[5];
双账户余额[5];
};
结构PersonTrans{
国际账户数量[5];
双反式[20];
chard_p[20];
};
int main(){
ifstream ifacc(“accounts.txt”);
人物角色;
如果(ifacc.is_open()){
对于(int i=0;i>p.acct_num[i];
ifacc>>p.name[i];
ifacc>>p.acct_bal[i];
}
}
ifacc.close();
iftrans;
iftrans.open(“transactions.txt”);
persontransq;
字符串行、第2行、第3行、第4行、第5行;
如果(iftrans.is_open()){
int计数器=0;
while(getline(iftrans,line)){
cout如果我理解的正确,您需要在不同的行中解析不同的单词。您应该能够使用std::stringstream
轻松完成此操作
e、 g
如果无法保证注释的假设始终有效,您可能需要执行额外的错误处理。如果我理解您的意思是正确的,您需要在不同的行中解析不同的单词。使用std::stringstream
,您应该能够轻松地完成此操作
e、 g
如果无法保证注释的假设始终有效,您可能需要进行额外的错误处理。因此我可能愚蠢地实现了它,但我认为您应该这样做。因为第一件事始终是ID,所以我将其添加到acct_num
接下来,我为行创建了一个while循环,我创建了一个新的字符串流(可能格式不好,不确定)在第一个字母后使用所有内容的子字符串。然后我检查每个事务的第一个字母是否是a d或a w,并将它们放入数组中。我有两个计数器用于w和d数组。如果它们是向量,则不需要这样做
我不确定你原来的结构是什么意思,所以我只是创建了一个存款和取款数组
#include<iostream>
#include<fstream>
#include<string>
#include<sstream>
using namespace std;
struct PersonTrans {
int acct_num[5];
double deposits[20];
double withdrawals[20];
};
int main() {
ifstream iftrans;
iftrans.open("transactions.txt");
PersonTrans q;
if (iftrans.is_open()) {
int i = 0;
int d = 0;
int w = 0;
string line;
while (getline(iftrans,line)) {
stringstream in(line);
string tmp;
int idNumber;
in >> idNumber;
q.acct_num[i] = idNumber;
while(in >> tmp) {
double value;
std::stringstream transaction(tmp.substr(1));
transaction >> value;
if (tmp[0] == 'd'){
q.deposits[d] = value;
d++;
}
else if (tmp[0] == 'w'){
q.withdrawals[w] = value;
w++;
}
}
i++;
}
}
for(int i = 0; i < 20; i++){
cout << q.deposits[i] << endl;
}
return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
结构PersonTrans{
国际账户数量[5];
双重存款[20];
双重提款[20];
};
int main(){
iftrans;
iftrans.open(“transactions.txt”);
persontransq;
如果(iftrans.is_open()){
int i=0;
int d=0;
int w=0;
弦线;
while(getline(iftrans,line)){
串入(线);
串tmp;
国际电话号码;
在>>idNumber中;
q、 账户编号[i]=idNumber;
而(在>>tmp中){
双重价值;
std::stringstream事务(tmp.substr(1));
交易>>价值;
如果(tmp[0]='d'){
q、 存款[d]=价值;
d++;
}
else if(tmp[0]=“w”){
q、 取款[w]=价值;
w++;
}
}
i++;
}
}
对于(int i=0;i<20;i++){
cout因此,我可能愚蠢地实现了它,但我认为您应该这样做
接下来,我为行创建了一个while循环,我创建了一个新的字符串流(可能格式不好,不确定)在第一个字母后使用所有内容的子字符串。然后我检查每个事务的第一个字母是否是a d或a w,并将它们放入数组中。我有两个计数器用于w和d数组。如果它们是向量,则不需要这样做
我不确定你原来的结构是什么意思,所以我只是创建了一个存款和取款数组
#include<iostream>
#include<fstream>
#include<string>
#include<sstream>
using namespace std;
struct PersonTrans {
int acct_num[5];
double deposits[20];
double withdrawals[20];
};
int main() {
ifstream iftrans;
iftrans.open("transactions.txt");
PersonTrans q;
if (iftrans.is_open()) {
int i = 0;
int d = 0;
int w = 0;
string line;
while (getline(iftrans,line)) {
stringstream in(line);
string tmp;
int idNumber;
in >> idNumber;
q.acct_num[i] = idNumber;
while(in >> tmp) {
double value;
std::stringstream transaction(tmp.substr(1));
transaction >> value;
if (tmp[0] == 'd'){
q.deposits[d] = value;
d++;
}
else if (tmp[0] == 'w'){
q.withdrawals[w] = value;
w++;
}
}
i++;
}
}
for(int i = 0; i < 20; i++){
cout << q.deposits[i] << endl;
}
return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
结构PersonTrans{
国际账户数量[5];
双重存款[20];
双重提款[20];
};
int main(){
iftrans;
iftrans.open(“transactions.txt”);
persontransq;
如果(iftrans.is_open()){
int i=0;
int d=0;
int w=0;
弦线;
while(getline(iftrans,line)){
串入(线);
串tmp;
国际电话号码;
在>>idNumber中;
q、 账户编号[i]=idNumber;
而(在>>tmp中){
双重价值;
std::stringstream事务(tmp.substr(1));
交易>>价值;
如果(tmp[0]='d'){
q、 存款[d]=价值;
d++;
}
else if(tmp[0]=“w”){
q、 取款[w]=价值;
w++;
}
}
i++;
}
}
对于(int i=0;i<20;i++){
你试过什么?你试过把你的行放到字符串流中吗?关于for(size\u t i=0;i)问题是,你如何去掉数字之前的那些字符,对吗?它们有任何含义吗?你试过什么?你试过把你的行放到字符串流中吗?关于for(size_t i=0;i问题是,你如何在数字之前去掉这些字符,对吗?它们有任何含义吗?我唯一的问题是取款和存款没有正确地分开。我会玩弄它,但得到了一些提示,我看到你实施了一个排序系统,但似乎被co忽视了mpiler。我添加了另一个for循环来打印取款数组,在我这方面似乎都是正确的。你能用发生的事情更新主要帖子吗?我唯一的问题是取款和存款没有正确分开
#include<iostream>
#include<fstream>
#include<string>
#include<sstream>
using namespace std;
struct PersonTrans {
int acct_num[5];
double deposits[20];
double withdrawals[20];
};
int main() {
ifstream iftrans;
iftrans.open("transactions.txt");
PersonTrans q;
if (iftrans.is_open()) {
int i = 0;
int d = 0;
int w = 0;
string line;
while (getline(iftrans,line)) {
stringstream in(line);
string tmp;
int idNumber;
in >> idNumber;
q.acct_num[i] = idNumber;
while(in >> tmp) {
double value;
std::stringstream transaction(tmp.substr(1));
transaction >> value;
if (tmp[0] == 'd'){
q.deposits[d] = value;
d++;
}
else if (tmp[0] == 'w'){
q.withdrawals[w] = value;
w++;
}
}
i++;
}
}
for(int i = 0; i < 20; i++){
cout << q.deposits[i] << endl;
}
return 0;
}