您的位置:首页 > 其它

字符串反转问题

2015-05-02 21:27 246 查看
一,第一类的字符串反转问题,也就是输入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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string问题