智能字符串排序问题 !!
在2010年百度公司的一次校园招聘笔试中,要求应聘者设计一个strnumcmp函数。对比普通的strcmp函数,差别在于,当字符串中包含数字时,比较数字大小。数字大小相同或不含数字时,仍然沿用原来的strcmp方式。所有不含数字的字符串均小于含数字的字符串。每个字符串的长度范围为1 ~ 30,而其中包含的数字个数范围为0 ~ 8,且数字在一
个字符串中是连续的。例如:strnumcmp的判定结果:"abc"<"abc#"<"abcd"<"abc1"<"abc2"<"abc10"而一般的strcmp的判定结果:"abc"<"abc#"<"abc1"<"abc10"<"abc2"<"abcd"写一个程序,用strnumcmp函数对一组字符串按升序排序。
Input
n个由一个空格分隔的字符串(1≤n≤100)
Output
排序后的n个字符串,两个字符串之间用一个空格分开。最后有一个换行符
Sample Input
abc# abc1 abc10 abcd abc2 abc
Sample Output
abc abc# abcd abc1 abc2 abc10
程序代码:
#include <stdio.h> #include <string.h> /*判断一个字符是否是数字字符,即'0'到'9'之间的字符,如果是数字字符返回1,否则返回0*/int isNum(char c) { if(c >= '0' && c <= '9') return 1; return 0; } /*智能字符串判断函数—— str1大于str2则返回1,小于返回-1,等于返回0*/int strnumcmp(char * str1, char * str2) { /*除去两个字符串前面相同的部分*/ while(*str1 == *str2) { if(*str1 == '\0' && *str2 == '\0') return 0; str1++; str2++; } /*若字符串比较的部分包含数字*/ if(*str1 <= '9' && *str1 >= '1' && '1' <= *str2 && *str2 <= '9') { int flag = *str1 > *str2 ? 1 : -1; while(1) { str1++; str2++; /*str1是数字,str2不是数字。*/ if(isNum(*str1) == 1 && isNum(*str2) == 0) return 1; /*str2是数字,str1不是数字。*/ else if(isNum(*str2) == 1 && isNum(*str1) == 0) return -1; /*str1和str2都不是数字*/ else if(isNum(*str1) == 0 && isNum(*str2) == 0) return flag; } } /*若字符串比较的部分不包含数字*/ return *str1 > *str2 ? 1 : -1; } void main() { char str[100][30], temp[30]; int n, i = 0, j, k; while(scanf("%s", str[i]) != EOF) i++; n = i; for(i = 0; i < n - 1; i++) { k = i; for(j = i + 1; j < n; j++) if(strnumcmp(str[j], str[k]) < 0) k = j; strcpy(temp, str[k]); strcpy(str[k], str[i]); strcpy(str[i], temp); } for(i = 0; i < n; i++) printf("%s ", str[i]); }高手帮忙改写下
把代码改对
万分感谢
在线等