//我写的一个简单的使用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;
}
运行结果:
懂了!多谢