数据结构之字符串反转
说明:有一条语句,如"Life is painting a picture, not doing a sum",要求语句中的单词左右对换,但每个单词不变,即变换后的串应该为
"sum a doing not, picture a painting is Life"
两种方法:
1.分治法,将字符串变成一个单词和一个新的字符串然后对换,递归处理字符串。
2.先整体反转,再每个单词反转,类似数组右移K位的方法
// project1.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include<string.h>const int LENGTH=1000;//分治法 int blank_pos(char str[],int beg,int end){for(int i=beg;str[i] && i<=end;i++){if(str[i]==' ')return i;}return -1; } void reverse_adjacent(char str[],int beg,int end){for(int i=beg,j=end;i<j;i++,j--){char tmp=str[i];str[i]=str[j];str[j]=tmp;} }void combine(char str[],int beg,int pos,int end){char tmp[LENGTH];//将str[pos+1..end]复制到tmp[beg..beg+end-pos-1]memcpy(&tmp[beg],&str[pos+1],sizeof(char)*(end-pos));memcpy(&tmp[beg+end-pos+1],&str[beg],sizeof(char)*(pos-beg));//str[beg+end-pos]=' 'tmp[beg+end-pos]=' ';memcpy(&str[beg],&tmp[beg],sizeof(char)*(end-beg+1)); } //分治法 void reverse_words(char str[],int beg,int end){if(str==NULL || beg==end)return;int pos=blank_pos(str,beg,end);//空格位置if(pos!=-1 && pos>=beg && pos<=end){//存在空格reverse_words(str,pos+1,end);combine(str,beg,pos,end);} } //先整体反转,再每个单词反转 void reverse_words_two(char str[],int beg,int end){reverse_adjacent(str,beg,end);//整体反转//每个单词反转int i=beg;while(i<=end){int start=i,ending;while(str[i] && str[i]!=' ')i++;ending=i-1;i++;//跳过空格if(start<ending)reverse_adjacent(str,start,ending);} }int _tmain(int argc, _TCHAR* argv[]) {char str1[LENGTH]=" banana apple orange ";char str2[LENGTH]="abcdefghij klmn ";char str3[LENGTH]=" 123456789 234 986 3433 9999";reverse_words_two(str1,0,strlen(str1)-1);reverse_words(str1,0,strlen(str1)-1);printf("After reverse,str=%s\n",str1);reverse_words_two(str2,0,strlen(str2)-1);reverse_words(str2,0,strlen(str2)-1);printf("After reverse,str=%s\n",str2);reverse_words_two(str3,0,strlen(str3)-1);reverse_words(str3,0,strlen(str3)-1);printf("After reverse,str=%s\n",str3);return 0; }
转载于:https://www.cnblogs.com/abc123456789/p/3433445.html
数据结构之字符串反转相关推荐
- 常考数据结构与算法:反转字符串
题目描述 写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串.(字符串长度不超过1000) 示例 输入 "abcd" 返回值 "dcba" publi ...
- java实现单词或字符串反转
最近抽空研究java数据结构发现栈和队列的特殊用处,比如像实现单词或字符串反转这一个功能,传统的做法是,将单词切分成一个个字符,然后重新组装成一个新的单词,如果用栈来实现是不是也可以做呢? 思考一下栈 ...
- 递归算法_字符串反转_20230412
递归算法-字符串反转 前言 递归算法对解决重复的子问题非常有效,字符串反转也可以用递归算法加以解决,递归算法设计的关键是建立子问题和原问题之间的相关性,同时需要确立递归退出的条件:如果递归退出的条件无 ...
- python方法实现字符串反转
方法一:反转列表法 Python中,列表可以进行反转,我们只要把字符串转换成列表,使用reverse()方法,进行反转,然后再使用字符串的join()方法遍历列表,合并成一个字符串. 方法二:循环反向 ...
- 例35:字符串反转,如将字符串 “www.runoob.com“ 反转为 “moc.boonur.www“。
#include <stdio.h> /*** 问题描述:字符串反转,如将字符串 "www.runoob.com" 反转为 "moc.boonur.www&q ...
- 面试题:将字符串反转的8种方法,你能想到几种?
面试中,经常会遇到这样的问题,给定字符串"abc123",你能够想到几种方式将该字符串进行反转,得到"321cba"? 本文就带大家展示几种常见的字符串反转的方 ...
- 字符串反转python_python字符串反转的四种方法详解
这篇文章主要介绍了python字符串反转的四种详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.用reduce函数方法 book = 'Pyt ...
- java案例——字符串反转
java案例--字符串反转 1.需求: 定义一个方法,实现字符串反转.键盘录入一个字符串,调用该方法后,在控制台输出结果 例如,键盘录入abc,输出结果cba 2.思路: 1.键盘录入一个字符串,用S ...
- 字符串-字符串反转(双指针)
题意: 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这一问题. ...
最新文章
- 使用C语言来扩展PHP,写PHP扩展dll
- 计算机启动慢 原因,电脑开机慢的原因
- 这 10 行比较字符串相等的代码给我整懵了,不信你也来看看
- L1-060 心理阴影面积 (5 分)-PAT 团体程序设计天梯赛 GPLT
- srt乱码字幕中文显示解决办法
- 解决eclipse中git中cannot open git-upload-pack(无法打开Git上传包)问题
- Redis的过滤器(SCAN)功能
- 智能优化算法:黏菌优化算法 - 附代码
- 5、手把手教React Native实战之盒子模型BoxApp
- jersey_教程–带有Jersey和Spring的Java REST API设计和实现
- SSD固态硬盘知识简介
- Centos-Wake On Lan远程唤醒服务器
- UVALive - 4487 HDU3234 UVA12232 【带权并查集】 非常好的一道题!!!
- html 百分比饼状图,highcharts饼状图百分比显示的数据和写的不同
- 批量删除html 超链接,Excel中批量删除超链接的方法
- 用Hadoop构建电影推荐系统
- CEPH告警:health_warn 45 pgs degraded;60 pgs unclean; 45 pgs undersized
- 数组和链表分别比较适合用于什么场景
- 51单片机入门教程(1)——点亮一个LED灯
- 前端性能优化:1.什么是前端性能优化