字符串反转问题
来源:互联网 发布:数据查询系统源代码 编辑:程序博客网 时间:2024/06/03 13:27
一,第一类的字符串反转问题,也就是输入This is a string.,输出为.gnirts a si sihT,整个字符串反转:
void reverse1(char *a){ int len=strlen(a)-1; int i=0; while(i<len){ char ch=a[i]; a[i++]=a[len]; a[len--]=ch; }}
#include<stdio.h>#include<string.h>int main(){ char a[]="this is a string"; reverse1(a); printf("%s\n",a); return 0;}
二,将字符串指定位置之前的字串反转到尾部,如a[]={‘1’,’2’,’3’,’4’,’5’,’6’,’7’},n=3,反转后a’[]={‘4’,’5’,’6’,’7’,’1’,’2’,’3’},类似leetcode上的Rotate Array。
网上看到这种算法,觉得很巧妙,类比于矩阵BA=(A^TB^T)^T(A^T表示A的逆序)
void reverse2(char *a,int s,int e){ while(s<e){ char ch=a[s]; a[s++]=a[e]; a[e--]=ch; }}#include<stdio.h> int main(){ char a[]={'1','2','3','4','5,'6','7'}; int n; scanf("%d",&n); reverse2(a,0,n-1); //类似于A(字符串下标0到n-1)的逆序。 reverse2(a,n,strlen(a)-1); reverse2(a,0,strlen(a)-1); printf("%s\n",a);}
三,对于This is a string,最终反转成string a is This。网上说的用栈实现,不太会。想法先把整个字符串反转,再逐个单词进行反转。
#include<stdio.h>#include<string.h>void reverse3(char *a,int s,int e){ while(s<e){ char ch =a[s]; a[s++]=a[e]; a[e--]=ch; }}char *reversal(char *a){ //char*,返回反转字符串后的指针 int s=0; int e=0; reverse3(a,0,strlen(a)-1); //将整个串反转 for(int i=0;i<=strlen(a);i++){ if(a[i]==' '||a[i]=='\0'){ e=i-1; reverse3(a,s,e); s=i+1; } }//逐个遍历,遇到单词就反转。 return a;}int main(){ char a[]="this is a string"; printf("%s",reversal(a)); return 0; }
0 0
- 字符串反转系列问题
- 字符串反转问题
- 字符串反转系列问题
- 字符串反转问题
- 字符串反转问题
- c++ 字符串反转问题
- 字符串反转问题总结
- day4_字符串反转问题
- 字符串反转问题
- 多个字符串反转问题
- C#字符串的反转问题
- 面试问题之 按单词反转字符串
- 一道经典的字符串反转问题**
- 一个关于字符串反转的问题;
- 面试问题之 按单词反转字符串
- c语言中关于字符串反转问题
- java面试笔试题,字符串反转问题
- 关于NSString字符串反转的问题
- leetcode--Longest Substring Without Repeating Characters
- 「HD_ACM」A+B for Input-Output Practice (IV)
- Java设计模式之单例模式之登记式单例
- 洗草莓时不能去蒂 否则会中毒
- ubuntu14.04 安装Apache+Mysql+PHP
- 字符串反转问题
- Ubuntu下的mysql安装
- CB60-G16 IB晶振更换步骤
- 函数指针的几种用法
- Boost - 序列化 (Serialization)
- 第23讲-项目二-乱玩数字
- 模式识别实例-药丸颗粒数量识别
- hdu 3001(状态压缩dp)
- 框架导航的写法