1. 程式人生 > 其它 >對二維陣列中的字串進行排序

對二維陣列中的字串進行排序

//對二維陣列中的字串進行排序
//用選擇排序法的思想 
#include	<stdio.h>
#include	<string.h>
#define SIZE 10
#define LIMIT 80

int	main(void)
{
	char names[SIZE][LIMIT];
	char *ptchar[SIZE];//建立一個指標陣列,讓這個指標陣列與一維字串陣列一一對應,從而將程式等價為對指標排序
	char *ptchar_1=NULL;
	for (int n=0;n<;n++)
	{
		fgets(names[n],LIMIT,stdin);
		if (ptchar_1=strchr(names[n],'\n'))//由於要多次輸入,因此對fgets()函式的優化必不可少
		{
			*ptchar_1='\0';
		}
		else
		{
			while (getchar()!='\n')
			{
				continue;
			}
		}
	}
	for (int i=0;i<SIZE;i++)
	{
		ptchar[i]=names[i];
	}
	int out_i;
	int in_i;
	
	for (out_i=0;out_i<SIZE-1;out_i++)
	{
		for (in_i=out_i+1;in_i<SIZE;in_i++)
		{
			if (strcmp(ptchar[out_i],ptchar[in_i])>0)//strcmp函式能夠比較能夠按順序比較字元之間的大小關係(ASCII碼)
			{
				char *ptchar_2;//這個指標作為中間變數。
				ptchar_2=ptchar[out_i];
				ptchar[out_i]=ptchar[in_i];
				ptchar[in_i]=ptchar_2;
			}
		}
	}
	printf("print the original characters :\n");
	for (int n=0;n<SIZE;n++)
	{
		printf("%s\n",names[n]);
	}
	printf("print the changed characters :\n");
	for (int n=0;n<SIZE;n++)
	{
		printf("%s\n",ptchar[n]);
	}
	
	return	0;
}

列印結果:

mjahsjkdjkjklasd
masjdghjhajkdhjkahsjk
maygwjhjasjdkhjkahsd
masjdjahsjkhjkf
mahdgjhagsjhf
mashdgjahrwjjasgjdh
mhjasgchjaxjhagshgdas
masjdgjahsjhfjkhajksd
mashdghjagsgfhfhjagshd
mashdgjhasgfhasgd

print the original characters :
mjahsjkdjkjklasd
masjdghjhajkdhjkahsjk
maygwjhjasjdkhjkahsd
masjdjahsjkhjkf
mahdgjhagsjhf
mashdgjahrwjjasgjdh
mhjasgchjaxjhagshgdas
masjdgjahsjhfjkhajksd
mashdghjagsgfhfhjagshd
mashdgjhasgfhasgd

print the changed characters :
mahdgjhagsjhf
mashdghjagsgfhfhjagshd
mashdgjahrwjjasgjdh
mashdgjhasgfhasgd
masjdghjhajkdhjkahsjk
masjdgjahsjhfjkhajksd
masjdjahsjkhjkf
maygwjhjasjdkhjkahsd
mhjasgchjaxjhagshgdas
mjahsjkdjkjklasd

由此可知,該程式確實將輸入的字串按照ASCII碼進行排序。