c/c++整理--字符串(5)
来源:互联网 发布:算法之美 pdf 百度云 编辑:程序博客网 时间:2024/06/05 21:12
一、反转字符串,但其指定的子串不反转
给定一个字符串、一个这个字符串的子串,将第一个字符串反转,但保留子串的顺序不变。
例如:
第一个字符串:Welcome you, my friend
子串:you
输出:dneirf ym,you emocleW
#include <iostream> #include <cassert>#include <string.h>#include <stack> using namespace std; const char* reverse(const char* s1, const char* token){stack<char> stack1;const char* ptoken = token, *head = s1, *rear = s1;assert(s1 && token);while(*head != '\0'){while(*head != '\0' && *ptoken == *head){ptoken++;head++;}if(*ptoken == '\0'){const char* p;for(p = head-1; p >= rear; p--){stack1.push(*p);}ptoken = token;rear = head;}else{stack1.push(*rear++);head = rear;ptoken = token;}}char* pReturn = new char[strlen(s1)+1];int i = 0; while(!stack1.empty()){pReturn[i++] = stack1.top();stack1.pop();}pReturn[i] = '\0';return pReturn;} int main() { char welcome[] = "Welcome you, my friend";char token[] = "you";cout<<"before:"<<welcome<<endl;cout<<"after:"<<reverse(welcome, token)<<endl; return 0; }这道题对我来说还是有些难度,刚一接触这道题的时候,虽说想到了一个思路,但是一直没法调试成功,最终还是上网搜了下才解决,感觉对这个字符串的处理方面还是有所欠缺,很多问题只是有了大概的思路,但是具体的实现还是一个很大的问题啊。这段时间要多花点时间在这个字符串的处理上了。
输出:
before:Welcome you, my friendafter:dneirf ym ,you emocleW
二、编写字符串反转函数strrev
字符串反转函数strrev,要求时间和空间的效率都尽量高。
方法一
void change(char* str){int len = strlen(str);int i = 0;for(i = 0; i < len/2; i++){char temp = str[i];str[i] = str[len-i-1];str[len-i-1] = temp;}}
方法二
void change(char* str){int len = strlen(str);int i = 0;for(i = 0; i < len/2; i++){str[i] ^= str[len-i-1];str[len-i-1] ^= str[i];str[i] ^= str[len-i-1];}}
方法三
char* change(char* str, int len){if(len <= 1){return str;}char t = *str;*str = *(str + len - 1);*(str + len - 1) = t;return (change(str+1, len-2)-1);}
0 0
- c/c++整理--字符串(5)
- c/c++整理--字符串(1)
- c/c++整理--字符串(2)
- c/c++整理--字符串(3)
- c/c++整理--字符串(4)
- [C++]常用字符串操作整理
- C++ string函数 与 C字符串处理函数(整理)
- C++ string函数 与 C字符串处理函数(整理)
- C风格字符串与string类型(整理)
- C++ string函数 与 C字符串处理函数(整理)
- C语言字符串操作函数整理
- C语言整理-5
- C 字符串(C-style 字符串)
- C语言笔记整理5
- C-字符串应用(5)
- C语言程序设计整理(1)
- C语言程序设计整理(2)
- C语言程序设计整理(3)
- Android 对话框
- pin planner中符号标记的含义
- JDK1.8十个新特性
- KMP之Next数组
- ECMAScript 6学习笔记(一):展开运算符
- c/c++整理--字符串(5)
- 管理系统中的简单分区和文件系统
- 【linux】ubuntu中查看各种设备和资源的命令汇总
- 使用fdisk分区进行磁盘管理
- 在写Javaweb时遇到的几个问题。
- maven打包及其遇到的坑
- 【jzoj5089】【GDOI2017第四轮模拟day2】【叶片】
- 2017暑期实习招聘-产品经理-微软C+E(2)-3轮面试
- JAVA设计模式之单例模式