小白今天重写了一下字符串处理函数strcmp(char *p,char *q),小白洋洋洒洒的写了35行代码,神写了5行代码,~~~~(>_<)~~~~
int strcmp(char *p,char *q)
{
int i=0;
while(*(p+i)==*(q+i))
if(*(p+i++)=='\0') //这里用的妙!
return 0; //不管*(p+i++)是不是为'\0'都会i++;
return (*(p+i)-*(q+i)); //且字符只要参与加减乘除运算会自动换算成ASCII码来进行
}
相当于:
while(*(p+i)==*(q+i))
{
if(*(p+i)=='\0')
return 0;
i++;
}
再看看菜鸟小白写的又臭又长的流水代码:
int strcmp(char *p,char *q)
{
int i,j;
while(*p!='\0' && *q != '\0') //当两个字符串都没到末尾时
{
i=*p;
j=*q;
cout<<*p<<" "<<*q<<endl;
if(i==j) //若当前字符相等,判断下一次对比a或者b是否达到了尽头
{ //若都没有达到尽头,指针加1,继续下一轮
if(*(p+1)=='\0' && *(q+1)=='\0')
return 0;
else if(*(p+1)=='\0' && *(q+1)!='\0')
return (-1);
else if (*(p+1)!='\0' && *(q+1)=='\0')
return 1;
else
{
p++;
q++;
continue;
}
}
else if(i<j)
{
break;
return (-1);
}
else
{
break;
return (1);
}
}
}
总结:
1. i++的神用,已经神用之后对代码质量,效率的影响
2. ASCII码与字符之间如何切换,转化