각종 문자열 반전 방법(이 또는 교환법, 귀속 방법, 이분 사상)

어떻게 귀속적인 사상으로 문자열의 반전을 실현합니까?
후 3가지 방법으로 귀속 사용
직접 부호
#include 
#include 
#include 
//a=a+b;b=a-b;a=a-b
char* reverse1(char* str)//  1
{
    int len=strlen(str);
    char* start=str;
    char* p=str+len-1;
    while(str

str=*str+*p; *p=*str-*p; *str=*str-*p; str++; p--; } return start; } //a=a^b;b=a^b;a=a^b a!=b char* reverse2(char* str)// 2 { int len=strlen(str); char* start=str; char* p=str+len-1; while(str

str=*str^*p; *p=*str^*p; *str=*str^*p; str++; p--; } return start; } // // 1 char* reverse3(char* str)// { if(strlen(str)<2) { return str; } reverse3(str+1); int i; char *p=str; char first=*str; for(i=0;istr)-1;i++) { *p=*(p+1); p=p++; } *p=first; return str; } // char* reverse4(char* str,int left,int right) { if(left>=right) { return str; } int temp=str[left]; str[left]=str[right]; str[right]=temp; reverse4(str,left+1,right-1); return str; } // , 2 1 , char* reverse5(char str[],int left,int right) { if(right-left==2||right-left==1) { int temp=str[left]; str[left]=str[right]; str[right]=temp; return str; } if(left>=right) { return str; } if((right-left)%2==0&&(right-left)>2)// { int i,k; int mid=(right+left)/2; reverse5(str,left,mid-1); reverse5(str,mid+1,right); for(i=left,k=mid+1;ichar temp=str[i]; str[i]=str[k]; str[k]=temp; } } if((right-left)%2==1&&(right-left)>1)// { int i,k; int mid=(right+left)/2; reverse5(str,left,mid); reverse5(str,mid+1,right); for(i=left,k=mid+1;i1,k<=right;i++,k++) { char temp=str[i]; str[i]=str[k]; str[k]=temp; } } return str; } int main() { char c[100]; scanf("%s",c); reverse5(c,0,strlen(c)-1); printf("%s",c); return 0; }

좋은 웹페이지 즐겨찾기