自定义strcmp函数实现字符串排序
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
//
//二维字符数组; 排序
//
int MyStrCmp(char *s1, char *s2);
char *MyStrCpy(char *dest, char *src);
void Output(int rows, char *p[rows]);
int main(int argc, const char *argv[])
{
int rows=5;
int cols=20;
char *arr[] = {"HelloW ","HelloO","HelloR","HelloL", "HelloD" };
char *parr[rows];
for(int i=0; i< rows; i++ ){
*(parr+i) = *(arr + i);
}
int is_ascend = 0;
puts("before sort:");
Output(5, parr);
putchar(10);
//排序,选择法
for(int j=0; j<rows-1; j++){
int cur=j;
for(int i=j+1; i<rows; i++ ){
int diff = MyStrCmp(parr[cur], parr[i]);
//printf("cur=%d, j=%d, i=%d, arr[cur]=%s, arr[i]=%s, diff=%d\n",cur, j,i, arr[cur], arr[i], diff);
if(is_ascend==1)
{
//puts("ascend");
if(diff > 0 ) cur = i; // cur > i, 升序要把小的放前面
}
else //降序
{
//puts("descend");
if(diff < 0 ) cur=i;// cur < i, 降升序要把大的放前面
}
//printf("cur=%d\n", cur);
}
if(cur!=j){
//puts("exchange");
char *t = parr[cur];
parr[cur] = parr[j];
parr[j] = t;
}
//printf("cur=%d, j=%d, arr[%d]=%s\n",cur, j, cur,arr[cur]);
//puts("*****");
//putchar(10);
}
puts("after sort:");
Output(5, parr);
return 0;
}
void Output(int rows, char *p[rows])
{
for(int i=0; i<rows; i++){
printf("%s\t", p[i]);
}
putchar(10);
}
char *MyStrCpy(char *dest, char *src)
{
puts("***MyStrCpy***");
int i;
for(i=0; *(src + i)!='\0'; i++)
{
printf("*(src+%d)=%c\t",i,*(src+i));
*(dest+i) = *(src + i);
}
*(dest+i) = '\0';
putchar(10);
}
int MyStrCmp(char *s1, char *s2)
{
int r;
for(int i=0; *(s1+i)!='\0'; i++)
{
r = *(s1+i) - *(s2+i);
//printf("*(s1+%d) = %c, *(s2+%d) = %c\n", i, *(s1+i),i,*(s2+i) );
//printf("r=%d\n", r);
}
return r;
}