字符串的反转
2016-04-19 21:35
204 查看
问题描述:字符串反转类型的题目可谓是经典热门题型之一,其主要考察反转的方法以及指针的移动操作。
例如输入:“I am a student”。
输出:“student a am I”。
抓住其反转的基本思路,此题就显得再简单不过了,可以先将字符串整体反转,然后再将各单词局部反转,就可得到预期的结果。
▲注:只要掌握其反转的大体过程,清楚每一步各指针的位置,问题便迎刃而解,代码的实现只是分分钟的事儿。
例如输入:“I am a student”。
输出:“student a am I”。
抓住其反转的基本思路,此题就显得再简单不过了,可以先将字符串整体反转,然后再将各单词局部反转,就可得到预期的结果。
<span style="color:#000099;">#include<iostream> #include<cassert> using namespace std; char* my_transform(char* arr) { assert(arr);//防御式编程,避免空指针的传入 char* str1 = arr; char* str2 = arr; while (*str2 != '\0')//遍历原串至末尾,注意此时在‘\0’处,应回退一次 { str2++; } str2--; while (str1 <= str2)//先将整个字符串反转 { char tmp = *str1; *str1 = *str2; *str2 = tmp; str1++; str2--; } cout << "整体反转后的字符串为---->:" << arr << endl;//反转后为:“elpmas a si sihT” cout << endl; char* str = arr;//重新开始反转整体翻转后的字符串(局部反转) str1 = str2 = arr; while (*str1 != '\0') { if (*str1 == ' ' || *(str1 + 1) == '\0')//空格或指针的下一位置字符串结束,说明该位置不用反转 { str2--;//指针2回退一次至有效位置 if (*(str1 + 1) == '\0') { str2++; } while (str <= str2)//局部反转(空格隔开的各单词反转) { char tmp = *str2; *str2 = *str; *str = tmp; str++; str2--; } str = str1 + 1;//str遇到空格,则跳至下一单词的首部 str2 = str1;//因为str2和str1是未遇空格则不断移动的,所以str2从空格处继续开始向后移动 } str1++; str2++; } return arr; } int main() { char arr[] = "This is a sample"; cout << "未反转前的原字符串为---->:" << arr << endl; cout << endl; char* ret = my_transform(arr); cout << "反转完成后的字符串为---->:" << ret << endl; cout << endl; return 0; }</span>
▲注:只要掌握其反转的大体过程,清楚每一步各指针的位置,问题便迎刃而解,代码的实现只是分分钟的事儿。
相关文章推荐
- 数据采集器移动手持打印POS终端(PDA)商超抄单方案-PDA抄单无线开单+进销存软件
- AngularJS 第一个小程序
- 垂直居中
- spark源码分析之任务调度篇
- CodeForces 638B Making Genome in Berland
- PHP mail() 函数
- swift快捷键大全
- 充分利用时间 踏踏实实
- 典型用户分析
- pda完美结合开销售单据haohantech-安卓打票扫描PDA智能POS 发展现状如何,会取代传统电脑 代替手工开单 么?
- 车站订票系统可行性分析报告
- linux快捷键
- executeScalar ExecuteNonQuery
- android将对象写入文件和从文件中读取对象数据
- Python趣味编程---Python也会讲笑话
- 密码发生器
- 有效数字的保留
- Qt中的窗口部件
- 【实践】获取CKEditor的html文本、纯文本、被选中的内容及赋值
- JS断点调试心得(转)