说明:有一条语句,如"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

数据结构之字符串反转相关推荐

  1. 常考数据结构与算法:反转字符串

    题目描述 写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串.(字符串长度不超过1000) 示例 输入 "abcd" 返回值 "dcba" publi ...

  2. java实现单词或字符串反转

    最近抽空研究java数据结构发现栈和队列的特殊用处,比如像实现单词或字符串反转这一个功能,传统的做法是,将单词切分成一个个字符,然后重新组装成一个新的单词,如果用栈来实现是不是也可以做呢? 思考一下栈 ...

  3. 递归算法_字符串反转_20230412

    递归算法-字符串反转 前言 递归算法对解决重复的子问题非常有效,字符串反转也可以用递归算法加以解决,递归算法设计的关键是建立子问题和原问题之间的相关性,同时需要确立递归退出的条件:如果递归退出的条件无 ...

  4. python方法实现字符串反转

    方法一:反转列表法 Python中,列表可以进行反转,我们只要把字符串转换成列表,使用reverse()方法,进行反转,然后再使用字符串的join()方法遍历列表,合并成一个字符串. 方法二:循环反向 ...

  5. 例35:字符串反转,如将字符串 “www.runoob.com“ 反转为 “moc.boonur.www“。

    #include <stdio.h> /*** 问题描述:字符串反转,如将字符串 "www.runoob.com" 反转为 "moc.boonur.www&q ...

  6. 面试题:将字符串反转的8种方法,你能想到几种?

    面试中,经常会遇到这样的问题,给定字符串"abc123",你能够想到几种方式将该字符串进行反转,得到"321cba"? 本文就带大家展示几种常见的字符串反转的方 ...

  7. 字符串反转python_python字符串反转的四种方法详解

    这篇文章主要介绍了python字符串反转的四种详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.用reduce函数方法 book = 'Pyt ...

  8. java案例——字符串反转

    java案例--字符串反转 1.需求: 定义一个方法,实现字符串反转.键盘录入一个字符串,调用该方法后,在控制台输出结果 例如,键盘录入abc,输出结果cba 2.思路: 1.键盘录入一个字符串,用S ...

  9. 字符串-字符串反转(双指针)

    题意: 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这一问题. ...

最新文章

  1. 使用C语言来扩展PHP,写PHP扩展dll
  2. 计算机启动慢 原因,电脑开机慢的原因
  3. 这 10 行比较字符串相等的代码给我整懵了,不信你也来看看
  4. L1-060 心理阴影面积 (5 分)-PAT 团体程序设计天梯赛 GPLT
  5. srt乱码字幕中文显示解决办法
  6. 解决eclipse中git中cannot open git-upload-pack(无法打开Git上传包)问题
  7. Redis的过滤器(SCAN)功能
  8. 智能优化算法:黏菌优化算法 - 附代码
  9. 5、手把手教React Native实战之盒子模型BoxApp
  10. jersey_教程–带有Jersey和Spring的Java REST API设计和实现
  11. SSD固态硬盘知识简介
  12. Centos-Wake On Lan远程唤醒服务器
  13. UVALive - 4487 HDU3234 UVA12232 【带权并查集】 非常好的一道题!!!
  14. html 百分比饼状图,highcharts饼状图百分比显示的数据和写的不同
  15. 批量删除html 超链接,Excel中批量删除超链接的方法
  16. 用Hadoop构建电影推荐系统
  17. CEPH告警:health_warn 45 pgs degraded;60 pgs unclean; 45 pgs undersized
  18. 数组和链表分别比较适合用于什么场景
  19. 51单片机入门教程(1)——点亮一个LED灯
  20. 前端性能优化:1.什么是前端性能优化

热门文章

  1. 西双版纳真的适合养老吗?
  2. 现在资本进入社区团购,大搞补贴战,算不算涉嫌扰乱市场,垄断?
  3. 人赚钱多少的本质区别在于:出售自己时间的方法不同
  4. 布尔运算,二进制和门电路
  5. sql分区表上创建索引_SQL Server中分区表和索引的选项
  6. MySQL 取得两个时间相差的分钟数 及 常用时间函数
  7. hive join on 条件 与 where 条件区别
  8. Entity Framework 实体框架的形成之旅--利用Unity对象依赖注入优化实体框架(2)
  9. Java实现求二叉树的路径和
  10. Win+Tab键实现自定义程序列表间的窗口切换