1

我几乎让它工作了,但是它将以大写开头的姓氏和不以大写字母开头的姓氏分开。

示例文件

姓 名 DaysofRental BalanceDue

史密斯乔 15 100.50

美国能源部约翰 10 95.20

安德森保罗 30 20.00

奥唐奈仪 10 24.30

福斯特山姆 30 15.00

佐姆·皮特 10 20.00

模拟寒冷 100 30

smitty 克里斯 200 200

许康纳 1 200

阿尼洛史蒂夫 0 0

输出什么“排序”文件

姓 名 DaysofRental BalanceDue

安德森保罗 30 $20.00

多伊约翰 10 美元 95.20 美元

寄养山姆 30 $15.00

模拟寒冷 100 美元 30.00 美元

奥唐奈仪 10 美元 24.30 美元

史密斯乔 15 美元 100.50 美元

佐姆·皮特 10 $20.00

anilo steve 0 $0.00
smitty Chris 200 $200.00
xu Conor 1 $200.00

#include <iostream>
#include <iomanip>
#include <stdlib.h>
#include <fstream>
#include <string.h>  
using namespace std;
const int STRINGSIZE = 30;
const int LISTSIZE  = 10;
const int HEADSIZE = 4;

typedef char STRING30[STRINGSIZE];
typedef STRING30 NAMES[LISTSIZE];

int main(int argc, char** argv)
{
ofstream outfile;
outfile.open("sorted.txt");

int count, 
    count2,
    mindex;

int rdays[LISTSIZE],
    hrdays;

double baldue[LISTSIZE],
       totalbaldue, 
       hbaldue, 
       tempnum;

NAMES first, 
      last, 
      header;

STRING30 mname, 
         tempname;  

ifstream in;
in.open("invoice1_test1.txt");

//Input Section

if(in.is_open())
{
    in >> header[0]
       >> header[1] 
       >> header[2] 
       >> header[3]; 

    int count = 0;

    while(!in.eof())
    {
        in >> last [count] 
           >> first[count]
           >> rdays[count]
           >> baldue[count];
        count++;
    }
    in.close();     
}

else 

{
    cout << "File failed to open" << endl;
}

    for(count = 0; count < LISTSIZE; count++)
{
    mindex = count;
    strcpy(mname, last[count]);
    for(count2 = count; count2 < LISTSIZE; count2++)
    {
        if(strcmp(last[count2], mname) == -1)
        {
            mindex = count2;
            strcpy(mname, last[count2]);
        }
    }

    strcpy(tempname, last[count]);
    strcpy(last[count], mname);
    strcpy(last[mindex], tempname);

    strcpy(tempname, first[count]);
    strcpy(first[count], first[mindex]);
    strcpy(first[mindex], tempname);

    tempnum = rdays[count];
    rdays[count]= rdays[mindex];
    rdays[mindex]= tempnum;

    tempnum = baldue[count];
    baldue[count] = baldue[mindex];
    baldue[mindex] = tempnum;
}
outfile << setiosflags(ios::showpoint | ios::fixed) << setprecision(2);

outfile << left << setw(20) << header[0] << setw(20) << header[1] << setw(20) << header[2] << setw(20) << header[3] << endl;

for(int count = 0; count<LISTSIZE; count++)
{
    outfile << left << setw(20) << last[count] << setw(20) << first[count] << setw(20) << rdays[count] << "$" << setw(20) << baldue[count] << endl;
}
4

2 回答 2

2

用于if (strcmpi(last[count2], mname) < 0);比较,而不是if (strcmp(last[count2], mname) ==-1);

strcmpi()功能相同,strcmp()但不区分大小写。

exit(1)打不开也加ifstream in

于 2018-05-05T02:52:49.530 回答
0

存储前将所有名称转换为大写。

于 2018-05-05T02:29:37.553 回答