数据结构与算法-字符串反转
2015-09-06 18:19
471 查看
百度2014笔试题: 字符串反转,要求不能使用系统函数,参数和返回值都是char指针。
总结:
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
</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
相关文章推荐
- 数据结构专题——线段树
- 数据结构中的查找算法-哈希表(3)
- 数据结构中的查找算法-动态查找表(2)
- 算法导论基础篇:两个栈实现一个队列
- 关于SparkMLlib的基础数据结构 Spark-MLlib-Basics
- 数据结构学习笔记 (一)
- 数据结构之二叉树(遍历、建立、深度)
- Android开发中高效的数据结构用SparseArray代替HashMap
- 数据结构基础 链表的插入排序程序
- 数据结构与算法Java---1.6
- java中的数据结构详解
- 数据结构(栈和队列)
- 数据结构-树
- 西风的数据结构教程(3)——二叉树
- 数据结构学习笔记 C++版 (一)
- 数据结构 3____线性表
- 数据结构 2____概论
- Java基础课程学习总结,使用LinkedList简单模拟队列数据结构和堆栈数据结构的实现
- 数据结构必须掌握内容队列--入队,出队
- 数据结构---抽象建模