C++ 如何读入文件并将该文件排序为不同类型的数据,所有数据都存储在结构中的特定数组中

C++ 如何读入文件并将该文件排序为不同类型的数据,所有数据都存储在结构中的特定数组中,c++,visual-c++,C++,Visual C++,我需要能够读入(第一个数字是指身份证号码,后面是交易,制作银行对账单代码,d表示存款,w表示取款,后面的数字是金额): 并将其排序到不同的数组中,所有数组都存储在一个结构中。我尝试过字符串流和其他各种我想的东西,我就像C++中的精通,在第一年的课程中是具体的。 这是我到目前为止的代码,第一组读入正常工作,但第二组无法正常工作: #include<iostream> #include<fstream> #include<string> #include<s

我需要能够读入(第一个数字是指身份证号码,后面是交易,制作银行对账单代码,d表示存款,w表示取款,后面的数字是金额):

并将其排序到不同的数组中,所有数组都存储在一个结构中。我尝试过字符串流和其他各种我想的东西,我就像C++中的精通,在第一年的课程中是具体的。 这是我到目前为止的代码,第一组读入正常工作,但第二组无法正常工作:

#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;
}