双指针实现字符串逆序
来源:互联网 发布:世界手机域名 编辑:程序博客网 时间:2024/06/05 17:48
如题所示的问题,应该在笔试中经常考。于是我就细究了一下。首先逆序,有不同的版本,比如由ab cd ef得到fe dc ba。我遇到的问题是以空格分割各自逆序,即由ab cd ef得到ba dc fe。
首先这个题目我有两种思路:
第一种,简单又直接,使用字符串分割保存在字符数组中,再以数组下标访问方式进行逆序。第二种,就是文章题目所示方法。但是为什么最后选择了这个方法呢。因为这种方法来解决问题,在外层循环只需便利一遍字符串即O(n),那么内层也就是调用的reverse函数的复杂度是o(n/2)。如果不利用指针的做法的话,在时间复杂度上是差不多的,但是需要较多的辅助空间。所以选择了后者。
在解决问题中,也遇到了一些还没弄清楚的问题,希望看到这篇文章的人也可以给我解答。一下是解决成功的代码。
void reverse(char* low,char* high){ if(low==NULL||high==NULL) return; while(low < high) { char temp = *low; *low = *high; *high = temp; low++; high--; }}int main(int argc, const char * argv[]) { // char *p = "I Love You"; char p[1000]; std::cin.getline(p, 1000); char* begin = p, *end = p; std::cout<<p<<std::endl; while(*begin!='\0') { if(*begin==' ') { (begin)++; (end)++; } else if(*end==' '||*end=='\0') { (end)--; reverse(begin,end); (end)++; begin=end; } else (end)++; } std::cout<<p<<std::endl; return 0;}
问题就是,在上述代码中,当我把main函数中字符串的输入换成char *p = "I Love You";
时,程序会在reverse函数中崩掉并提示内存错误。了解的可以给我回复。
0 0
- 双指针实现字符串逆序
- 指针实现字符串逆序
- 用指针求字符串逆序
- 用指针逆序输出字符串
- 字符串指针及句子逆序
- 实现字符串逆序输出
- C实现字符串逆序
- 字符串逆序算法实现
- 实现字符串的逆序
- 实现字符串逆序存储
- 实现字符串逆序
- 指针实现链表逆序
- 用指针实现数组逆序
- 使用字符指针将字符串逆序输出
- c语言实现字符串逆序
- 逆序输出字符串(递归实现)
- 字符串逆序(lua实现)
- 字符串逆序(lus实现)
- 简单介绍下mvc的路由,加载控制器,模型,视图
- eclipse 代码自动补全
- IP-guard加密软件的攻防之路
- Android 6.0 应用启动全流程源码分析
- eclipese maven(二)
- 双指针实现字符串逆序
- 51nod1414【思维】
- C++中的“:”的作用
- c++第一课
- C# Windows-API-Code-Pack文件选择对话框实例
- 【LightOJ 1122 + dp】
- 复合对象复制非静态数据
- 集合对象与常用数据结构性能分析
- LNK1123: 转换到 COFF 期间失败: 文件无效或损坏