智能字符串排序问题 !!
											在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]);
}
高手帮忙改写下把代码改对
万分感谢
在线等



 
											





 
	    

 
	