通过Qt中的程序对文本文件进行排序

Posted

技术标签:

【中文标题】通过Qt中的程序对文本文件进行排序【英文标题】:Sorting in text file through program in Qt 【发布时间】:2014-03-10 18:19:57 【问题描述】:

我正在使用 Qt5.2.1,我制作了一个程序,将一些值(如名称、编号、其他详细信息...)存储在一个文本文件中。我想按照名字来排列这些信息。

类似的东西。

一个

艾伦 24140239 some_other_info

艾薇儿 64376334 some_other_info

B

鲍勃 532523 some_other_info

等等

我该怎么做?我没有什么编程经验,所以请尽量保持简单:)

【问题讨论】:

问题是什么? 我该怎么做?我需要向正确的方向轻轻推动...逐步说明非常棒:D 我认为您需要提供更多详细信息。您的问题是如何对文本文件进行排序? 设置一个包含名称、编号和其他详细信息的结构。将单个元素放入这些元素的向量中。为该结构编写小于运算符并使用 std::sort。小于运算符应该对结构中的元素进行排序 @riklund 是的,这是我的问题,但它有点棘手(至少对我来说)我想要 Alphabets 下的排序元素(就像我在上面的问题中展示的那样) 【参考方案1】:

这个例子又快又脏,但应该给你一个想法。 我使用了一个结构,因为默认情况下所有元素都是 C++ 公开的 我想 Qt 有一些方便的功能来完成这些工作。

#include <algorithm>
#include <iostream>
#include <vector>
#include <string>

struct my_data_t

    std::string m_name;
    int m_number;

    // default constructor
    my_data_t( std::string name="", int number = 0) : 
    m_name(name), m_number(number) 

    // less than operator
    bool operator <(my_data_t b) const ;
;

// less than operator implementation ( I might have the const not quite right
// i struggle with const correctness.

bool my_data_t::operator<(my_data_t b) const 

    int32_t t = m_name.compare( b.m_name);

    if( t > 0 ) 
        return false;
    
    else if( t < 0 )
    
        return true;
    
    else if( m_number > b.m_number )
    
        return true;
    

    // add other tests 
    // refer to std::sort
    return false;


int main(int argc, char **argv )


    std::vector<my_data_t> data;
    my_data_t d3("Tom", 29) ;
    my_data_t d4("Jill", 22);
    data.push_back( my_data_t("Tom", 32) ); 
    data.push_back( my_data_t("Jack", 31) );
    data.push_back( d3 );
    data.push_back( d4 );

    std::cout <<  "Before sorting \n" << std::endl;

    for( size_t i = 0; i < data.size(); ++i )
    
        std::cout << "name, number:\t" << 
            data[i].m_name << 
            " " << 
            data[i].m_number << std::endl;
    
    std::cout << std::endl;

    std::sort( data.begin(), data.end() );

    std::cout <<  "After sorting \n" << std::endl;
    for( size_t i = 0; i < data.size(); ++i )
    
        std::cout << "name, number:\t" << 
            data[i].m_name << 
            " " << 
            data[i].m_number << std::endl;
    

    return 0;

cppreference std::sort

//用cygwin编译

$ g++ -o sort sort.cpp

// 运行示例 $ ./sort.exe

排序前

姓名、号码:汤姆 32 姓名、号码:杰克 31 姓名、号码:汤姆 29 姓名、编号:Jill 22

排序后

姓名、号码:Jack 31 姓名、编号:吉尔 22 姓名、编号:汤姆 32 姓名、号码:汤姆 29

【讨论】:

非常感谢...我现在有一个模糊的想法...让我试试这个。再次感谢。你是一个救生员:D

以上是关于通过Qt中的程序对文本文件进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Java 对文本文件中的数字进行排序?

linux中如何对一个文本内容进行排序呢

C ++:从文本文件中读取单行,按字母顺序对单词进行排序

按文本字符长度对目录中的文件进行排序并复制到其他目录[关闭]

如何按降序对文本文件中的不同类型数字排序到文本框?

java程序读一个文本文件并用hashmap进行存储,并对其中的信息按照姓名排序