可以比较数字的strnumcmp函数——百度笔试归来(应聘职位:商务搜索部_信息系统/web研发工程师)

来源:互联网 发布:风的季节 知乎 编辑:程序博客网 时间:2024/05/19 00:55

     百度的笔试题可真不是盖得,我应聘的职位是商务搜索部_信息系统/web研发工程师。全部是简答题和编程题,题量不大,时间为两个小时。其中有这样一道编程题,题目如下:

 

实现int strnumcmp(char * str1,char * str2);函数,当两个字符串的比较部分不包含数字时,函数功能和strcmp一样。否则比较字符串中的数字大小。例如:

"abc32"<"abc6";

"abcd">"abc9";

"abcd"<"abce";

 

算法思想:除去两个字符串前面相同的部分,然后,如果两个字符串的首字符都是数字则比较两个数字字符串的大小,否则实现strcmp函数的功能。

 

下面是我用C语言实现的程序代码,已经在visual C++ 6.0上运行通过了,拿出来与大家分享。虽然去不了百度,但还是积累一点经验,毕竟前方的路还很长!

 

#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 * str1="abc212";
 char * str2="abc122";
 int result=strnumcmp(str1,str2);

 if(result==0)
  printf("字符串相等。/n");
 else if(result>0)
  printf("str1大于str2。/n");
 else
  printf("str1小于str2。/n");
}