题目不想说了。
主要就是当数字相等的时候,需要通过strcmp来判断。
这里告诉我们,在分类的时候,一定要把所有的情况都考虑清楚。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
1. 输入数据
2. 提取字符串中的数字
int number(char *str);
3. 编写比较函数
int strnumcmp(const void *a, const void * b);
4. 调用qsort函数对字符串排序
5. 输出
*/
char record[110][40];
long number(char * str);
int cmp(const void *a, const void *b);
int main()
{
int count;
int k;
char tmp_input[40];
//initialization
count = 0;
while( scanf("%s",record[count])!=EOF ){
count++;
}
qsort(record,count,sizeof(record[0]),cmp);
for(k=0;k < count-1;k++){
printf("%s ",record[k]);
}
printf("%s\n",record[k]);
}
long number(char *str){
long tmp;
int flag; // flag == 1 的时候代表这个字符串里面有数字,==0 的时候,表示没有数字;
// initialization
flag = 0;
tmp = 0;
int k = 0;
while(str[k] != '\0'){
if('0' <= str[k] && str[k] <= '9'){
flag = 1;
tmp = tmp * 10 +((str[k]) - '0');
}
k++;
}
if(flag == 0) return -1;
return tmp;
}
int cmp(const void *a, const void *b){
if(number((char*)a) != -1 && number((char *)b)!=-1){
if(number((char*)a) != number((char *)b)){
if(number((char*)a) < number((char *)b)){
return -1;
} else return 1;
}
else return strcmp((char*)a,(char*)b);
} else if(number((char*)a) == -1 && number((char *)b) == -1 ){
return strcmp((char*)a,(char*)b);
} else if(number((char*)a) == -1 && number((char *)b) != -1){
return -1;
} else if(number((char*)a) != -1 && number((char *)b) == -1){
return 1;
}
}