您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法-字符串反转

2015-09-06 18:19 471 查看
百度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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: