C++中sort怎么对结构体数组中的字符串数组排序?

会用qsort排,但是sort只会排结构体中的string对象,sort能拍RT吗??请各位帮帮忙。。。

//我写的一个简单的使用C++ sort的例子,供你参考

#include <iostream>
#include <algorithm>

typedef struct _TestSortArray
{
    char _arrStr[16];
}TestSortArray;

int main()
{
    TestSortArray tsa;
    tsa._arrStr[15] = 0;

    char a = 'z';
    for (int i = 0;i < 15; ++i)
    {
        tsa._arrStr[i] = a;
        --a;
    }
    std::cout << "Previous string is:" << tsa._arrStr << std::endl;

    std::sort(tsa._arrStr,tsa._arrStr + 15);

    std::cout << "After sort,string is:" << tsa._arrStr << std::endl;

    system("pause");
    return 0;
}


追问

其实我的意思是这样的:
TestSortArray tsa[20];
for(int i=0;i<20;i++)
scanf("%s",tsa[i]. _arrStr);
然后对结构体TestSortArray对象数组tsa按照字符串Ascii码进行排序

追答

for(int i = 0; i < 20; ++i)
{
std::sort(tsa[i]._arrStr, tsa[i]._arrStr + 15); //字符数组大小为16,留出结束符位置

//若是把sort方法封装到TestSortArray类中并对外提供一个Sort()接口的话,还可以这样写

//tsa[i].Sort();

}

追问

...你好像还是理解错了,比如说
tsa[0]._arrStr="abcd" , tsa[1]._arrStr="a" , tsa[2]._arrStr="ab,;
那我对tsa[3]按照arrStr排序后就变成了
tsa[0]._arrStr="a" , tsa[1]._arrStr="ab" , tsa[2]._arrStr="abcd";

追答

哦,明白了,是在数组元素(这里元素是TestSortArray对象)间排序。


重新给出代码,我调试通过了。


#include <stdio.h>

#include <string.h>

#include <algorithm>


typedef struct _TestSortArray

{

char _arrStr[16];

}TestSortArray;


bool AscCompare(TestSortArray &tsa1,TestSortArray &tsa2)

{

return strcmp(tsa1._arrStr,tsa2._arrStr) < 0 ? true : false;

}


bool DescCompare(TestSortArray &tsa1,TestSortArray &tsa2)

{

return strcmp(tsa1._arrStr,tsa2._arrStr) > 0 ? true : false;

}


void PrintTestSortArray(TestSortArray *pTsa)

{

char szTemp[128] = {0};


for (int i = 0;i < 8;++i)

{

sprintf_s(szTemp,"tsa[%d]:",i);

printf("%s%s\r\n",szTemp,pTsa[i]._arrStr);

}


printf("\r\n");

}


int main()

{

TestSortArray tsa[8];

char a = 'z';


for (int i = 0;i < 8; ++i)

{

memset(tsa[i]._arrStr,0,16);

tsa[i]._arrStr[0] = a--;

}


printf("原TestArray数组:\r\n");

PrintTestSortArray(tsa);


std::sort(tsa,tsa + 8,AscCompare); //升序排列

printf("升序排列后TestArray数组:\r\n");

PrintTestSortArray(tsa);


std::sort(tsa,tsa + 8,DescCompare); //降序排列

printf("降序排列后TestArray数组:\r\n");

PrintTestSortArray(tsa);


system("pause");

return 0;

}


运行结果:

追问

懂了!多谢

温馨提示:答案为网友推荐,仅供参考