【问题标题】:How to sort a column from a text file in C++如何在 C++ 中对文本文件中的列进行排序
【发布时间】:2021-11-23 15:49:46
【问题描述】:

我是一个初学者,我们的活动是关于排序算法,我们需要根据姓氏或名字对文本文件中的输入进行排序。有谁知道如何从文本文件中对列进行排序?而且,我不知道如何合并其他列,以便根据名字对其进行相应的排序。谢谢您的帮助!这是我的代码:

void sortFirst() {
    string sortedFirst;
    string firstname[20];
    
    string key;
    string col1;
    string col2;
    string col3;
    
    ifstream sortByFirst;
    
    cout << "\n\n\tSORTED BY FIRST NAME ================\n\n";

    sortByFirst.open("student-file.txt");

    while(getline(sortByFirst, sortedFirst)) 
    {
        istringstream iss(sortedFirst); 
        iss >> col1 >> col2 >> col3; 
//      cout << "\t" << col2 << endl;

    for (int i = 0; i<1; i++) {
        firstname[i] = col2;
//      cout << "\n" << firstname[i];

    for (int a = 1, b = 0; a < 20; a++) {
        key = firstname[a];
        b = a-1;
        
        while (b >= 0 && firstname[b] > key) {
            firstname[b+1] = firstname[b];
            b--;
        }
        firstname[b+1] = key;
    }
    } 
    }
    
    for (int k = 1; k < 20; k++) {
        cout << "\n\t" << firstname[k];
    }

    sortByFirst.close();
    
}

这是我需要按名字按字母顺序排序的文本文件:

LASTNAME FIRSTNAME GRADE
Lorzano Jeff 78.23
Garcia Zen 89.56
Villa Luz 98.25
Mercado Cherrie 92.10
Lopez Cecile 74.10
Garcia LJ 89.45
Lina Carol 97.55
Villegas Cindy 78.89
Litan Irene 84.52
Austria Lina 89.00
Chavez Cheska 91.65
DelosReyes Melody 70.00
Wong Chris 87.00
Maralit Ian 75.45
Estrella Ashton 88.00
Fernandez Carmela 99.05
Benitez Sally 81.20
Abanilla Joseph 79.35

【问题讨论】:

  • “有谁知道如何从文本文件中对列进行排序”是什么意思?您需要收集所有行并将它们聚合到一个数据结构中,例如 struct Node { string firstname; stirng secondname; float grade; },然后在创建这样的容器后,您可以按名称、第二个名称或等级调用排序算法。
  • 首先您需要阅读每一行并将其拆分为名字、姓氏和年级
  • 您没有按照姓氏对文本文件进行排序。您正在对完整的行进行排序,而忽略了它们的内部结构。为了按内部结构的某些元素排序,无论是姓氏、名字还是等级,您需要能够从输入中仅提取该元素。你应该如何做到这一点取决于你已经学习了多少 C++,以及 imp[ut 文件的格式。这些参数我都不知道,但是这里有几个关键字供以后搜索:structstd::string:substrstd::stringstream&gt;&gt;
  • 我已经把它分开了,但我怎么能把它存储在数组中? sortByFirst.open("学生文件.txt"); while(getline(sortByFirst, sortedFirst)) { istringstream iss(sortedFirst); ISS >> col1 >> col2 >> col3; cout
  • 这样不行。您需要存储整个学生信息,并将整个学生信息移动到数组中的新位置。不仅仅是您比较的列。我建议将学生信息表示为 struct,而不是字符串。然后你可以只比较结构的一个元素,但移动并打印整个结构。

标签: c++ sorting columnsorting


【解决方案1】:

我能够整理出一些东西,这就是我得到的东西,其他栏目也是如此。虽然它有一些缺陷,比如标题包含在排序过程中。这是我的代码:

void sortLast() {
    studentRecord records[20];
    string lastname, firstname, grade, key;
    
    ifstream ifs("student-file.txt");
    
    if(ifs.fail()) {
        cout << "Error opening student records file." <<endl;
        exit(1);
     }
     
    int i = 0;
    while(! ifs.eof()){
        ifs >> lastname >> firstname >> grade;
        records[i].lastname = lastname;
        records[i].firstname = firstname;
        records[i].grade = grade;
        i++;
    }  
    
    cout << "\n\n\tSORTED BY LAST NAME =================\n\n";
    for(int i=0;i<19;i++) {
        for(int j=0;j<19-1;j++) {
            if(records[j].lastname>records[j+1].lastname) {
                t=records[j];
                records[j]=records[j+1];
                records[j+1]=t;
            }
        }
    }
    
    for (int k = 0; k < 19; k++) {
        cout << "\n\t";
        cout.width(15); cout << left << records[k].lastname;
        cout.width(15); cout << left << records[k].firstname << left << records[k].grade << endl;
    }
    
    ifs.close();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    相关资源
    最近更新 更多