字符串反转问题

来源:互联网 发布:数据查询系统源代码 编辑:程序博客网 时间: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
原创粉丝点击