//动态分配内存对输入的任意字符串排序 #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; }
时间: 2024-11-03 01:28:04