百度的笔试题可真不是盖得,我应聘的职位是商务搜索部_信息系统/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");
}