C语言 / 自定义strcmp函数实现字符串排序

自定义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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值