字符串逆序

来源:互联网 发布:人脸识别门禁接线端口 编辑:程序博客网 时间:2024/06/16 10:58
//简单的指针偏移的做法#include <stdio.h>#include <stdlib.h>int main(){char temp,*s,*s1,*s2;s1=(char *)malloc(100);printf("输入字符串:");gets(s1);s=s2=s1;while(*s2!='\0')s2++;s2--;while(s1<s2){temp=*s1;*s1=*s2;*s2=temp;s1++;s2--;}printf("逆序字符串:%s\n",s);return 0;}//不申请额外的空间,不用数组,不用C库函数(I/O除外)void reverse_string(char *ch){int i=0;while(*(ch+i)!='\0')//计算字符串长度++i;for(int k=0;k<i/2;k++){/*a=a^b;b=a^b; a=a^b;*/ch[k]=ch[k]^ch[i-k-1];//按位异或ch[i-k-1]=ch[k]^ch[i-k-1];ch[k]=ch[k]^ch[i-k-1];}}//用递归函数实现字符串反转char *reverse_string(char *ch)   {   if( !ch )   {   return NULL;}      int len = strlen(ch);//计算指定的字符串的长度, 不包括结束字符\0       if( len > 1 )       {           char ctemp =ch[0];           ch[0] = ch[len-1];              ch[len-1] = '\0';// 最后一个字符在下次递归时不再处理           reverse_string(ch+1); // 递归调用,每调用一次,要反转的字符串分别从头和末尾各减少一个           ch[len-1] = ctemp;       }       return ch;   }int main(){char str[100];gets(str);//确保str的空间足够大,以便在执行读操作时不发生溢出//scanf("%s",str);//scanf("%s",str) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,//但gets()函数将接收输入的整个字符串直到遇到换行为止//cin>>str;//如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理reverse_string(str);//printf("%s\n",str);cout<<str<<endl;//puts(str);//自动换行return 0;}

0 0