百度2014笔试题: 字符串反转,要求不能使用系统函数,参数和返回值都是char指针。
</pre><pre name="code" class="cpp">#include <stdio>
char *reverse_str(char *str){
int length=0;
char *start=str; //可以复制指针
while(*start){ //“指针不为空”的表示法
length++;
start++;
}
int i;
char tmp;
for (i=0;i<length/2;i++){
tmp=str[i]; //c++操作字符串:数组元素值=直接用头指针加[]下标,指针位置不变
str[i]=str[length-1-i];
str[length-1-i]=tmp;
}
return str;
}
int main(){
char arr[]="hello world";
char *str=arr; // 意思是char *str=&arr[0]
char *newstr=reverse_str(str);
printf("%s", newstr); // 用char数组头指针输出整个字符串
return 0;
}
总结:
1. 指针不为空-方法a:while(*str){}
-方法b: while(*str!='\0'){} // 必须是单引号,双引号表示string
2. 数组元素值操作-方法a:
tmp=*str;
*str=*end;
*end=tmp;
-方法b:
tmp=str[i];
str[i]=str[length-1-i];
str[length-1-i]=tmp;
待解问题:
http://blog.csdn.net/michellechouu/article/details/46787949
该方法为void,函数里str最后指向字符串中间元素,为什么printf(“%s”,str)可以输出整个反转的字符串?
假设:str在作为函数参数时,相当于复制了一个str指针,函数里面的str++操作并不改变原本的str指针,而只是改变了复制的str指针。
参考文章:
http://www.1dke.com//bianchengxuexi/76.html
http://blog.csdn.net/michellechouu/article/details/46787949