字符串反转问题
2015-05-02 21:27
246 查看
一,第一类的字符串反转问题,也就是输入This is a string.,输出为.gnirts a si sihT,整个字符串反转:
二,将字符串指定位置之前的字串反转到尾部,如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的逆序)
三,对于This is a string,最终反转成string a is This。网上说的用栈实现,不太会。想法先把整个字符串反转,再逐个单词进行反转。
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; }
相关文章推荐
- C#字符串的反转问题
- (C语言)字符串反转相关问题
- Java反转字符串和相关字符编码的问题解决
- Java链表及字符串反转问题集
- java基础——字符串中的反转Reverse问题(面试必备)
- 字符串反转系列问题
- c++ 字符串反转问题
- 字符串反转系列问题
- 一道经典的字符串反转问题**
- 面试问题之 按单词反转字符串
- for循环的使用 反转字符串,手写strrev()函数 解决问题
- 字符串反转问题
- 【Python初级】由判定回文数想到的,关于深浅复制,以及字符串反转的问题
- iOS NSString字符串反转的问题
- 一个关于字符串反转的问题;
- day4_字符串反转问题
- 多个字符串反转问题
- 简单谈谈Python中的反转字符串问题
- 字符串反转问题总结