//动态分配内存对输入的任意字符串排序
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
//比较大小
//int str_compare(const char* src,const char* dst)
//{
// int ret = 0;
// if (src == dst)
// {
// return 0;
// }
// if (dst == NULL)
// {
// return -1;
// }
// while (!(ret = *(unsigned char*)src - *(unsigned char*)dst)&& *dst)
// {
// ++src,++dst;
// }
// if (ret < 0)
// {
// ret = -1;
// }
// else if (ret > 0)
// {
// ret = 1;
// }
// return ret;
//}
//排序函数
void sort_string( char *strs[],int len)
{
int i=0,j;
for(i=0;i<len;i++)
{
for ( j = 1; j < len - i; j++)
{
if(strcmp(strs[j-1],strs[j]) >0)
{
char *tmp = 0;
tmp = strs[j-1];
strs[j-1] = strs[j];
strs[j] = tmp;
}
}
}
printf("\n 输出排序后的字符串:\n");
//输出排序后的字符串
for( i=0;i<len;i++)
{
printf("%s\n",strs[i]);
}
}
int main()
{
char *str=NULL,**strs=NULL,*p;
unsigned int str_size=0,strs_size=0,i;
printf("请输入字符串:(字符串间用空格隔开,回车结束输入)\n");
do
{
//动态分配内存
char *tmp=(char*)realloc(str,++str_size*sizeof(char));
if(!tmp)
{
free(str);
fputs("out of memory",stderr);
return 1;
}
str=tmp;
str[str_size-1]=getchar();
}while(str[str_size-1]!='\n');
str[str_size-1]=0;
for(p=strtok(str," \t");p;p=strtok(NULL," \t")) {
char **tmp=(char**)realloc(strs,++strs_size*sizeof(char*));
if(!tmp)
{
free(str);
free(strs);
fputs("out of memory",stderr);
return 1;
}
strs=tmp;
strs[strs_size-1]=p;
}
printf("\n你输入的字符串是:\n");
for(i=0;i<strs_size;++i)
printf("%u:%s\n",i+1,strs[i]);
//排序
sort_string(strs,strs_size);
//释放内存
free(strs);
free(str);
system("pause");
return 0;
}原文地址:http://blog.csdn.net/u013147600/article/details/46301429