Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2794761
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: C/C++

2012-06-24 23:32:45

字符串反转问题的第一类问题是,对于This is a string,最终反转成string a is This。
我们可以利用栈的先进后出实现
 
第二类的字符串反转问题,也就是输入This is a string.,输出为.gnirts a si sihT:
由一节得出的每个字符串,再逆转就OK
 
  char * p2 = str-1;
  while(*++p2);         //一般要求不能使用strlen 

点击(此处)折叠或打开

  1. #include
  2. #include
  3. #include
  4. #define Max 200
  5. void restr(char * str)
  6. {
  7.     //先将整个字符串逆转
  8.     char *p=str;
  9.     int len=strlen(str);
  10.     char *q=str+len-1;
  11.     //每个字符交换
  12.     while(p
  13.     {
  14.         *p=(*p)^(*q);
  15.         *q=(*p)^(*q);
  16.         *p=(*p)^(*q);
  17.         p++;
  18.         q--;
  19.     }
  20.     //逐个单词再逆转
  21.     p=str;
  22.     char * start,* end;
  23.     while(p)
  24.     {
  25.         start=p;
  26.         for(; *p!=' '&& *p!='\0';p++);
  27.         end=p-1;
  28.         while(start
  29.         {
  30.             *start=(*start)^(*end);
  31.             *end =(*start)^(*end);
  32.             *start=(*start)^(*end);
  33.             start++;
  34.             end--;
  35.         }
  36.         if(*p=='\0')
  37.         break;
  38.         p++;
  39.     }

  40. }

  41. int main()
  42. {
  43.     char s[Max];
  44.     //scanf("%s",&s);//无法接收空格
  45.     cin.getline(s,5000);
  46.     printf("%s\n",s);
  47.     restr(s);
  48.     printf("%s\n",s);
  49.     return 0;
  50. }

  51. i am a t
  52. i am a t
  53. t a am i
  54. Press any key to continue

阅读(535) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~