分享

以单词为最小单位翻转字符串

 孤步 2012-08-01

/************************************************************************/

/* 4:一句话的单词进行倒置,标点符号不倒换,比如一句话"i come from nanjing"倒换后变成"nanjing from come i".

                                                                     */

/************************************************************************/

 

 

#include<stdio.h>

#include<iostream>

using namespace std;

 

void Reverse_Array( int begin, int end, char *str)

{

 

       char temp;

      

       while(begin < end )

       {

              temp=str[begin];

              str[begin]=str[end];

              str[end]=temp;

              end--;

              begin++;

       }

}

 

 

 

char * Reverse( char *str)

{

       int j=0,i=0;

       int begin,end;

 

       char temp;

      

       j=strlen(str)-1;

 

       //第一步是进行全盘翻转,将单词变成 ".gnijnan morf emoc i"

       //下面while循环和 Reverse_Array(i,j,str);是等价的

//     while(j>i)

//     {

//            temp=str[i];

//            str[i]=str[j];

//            str[j]=temp;

//            j--;

//            i++;

//     }

       Reverse_Array(i,j,str);

 

      

       printf("全盘翻转str=..>> %s\n\n",str);

       i=0;

      

 

       //第二步  进行部分翻转,如果不是空格,则开始翻转单词

       while(str[i])

       {

             

              if(str[i]!=' ')//查询一个单词的起点和终点

              {

                     begin=i;//保存一个单词的起点

                     while(str[i]&&str[i]!=' ')

                     {

                            i++;

                     }

             

                     end=i-1;//保存一个单词的终点

              }

 

              //下面while循环和 Reverse_Array(begin,end,str);是等价的

//            while(end>begin)   //记录每个单词的起点和始点,并翻转

//            {

//                   temp=str[begin];

//                   str[begin]=str[end];

//                   str[end]=temp;

//                   end--;

//                   begin++;

//            }

              Reverse_Array(begin,end,str);

 

 

              //此时的i指向空格字符,为了继续循环,要i++,让i指向下一个非空格字符

              i++;

 

              printf("部分翻转str=..>> %s\n",str);

       }

       printf("\n",str);

 

       return str;

}

 

 

 

 

int main(void)

{

       int j=0,i=0,flag=0,begin,end;

       char str[]="I come from NanJing",temp;

       j=strlen(str)-1;

      

       printf("初始string=.>>> %s\n\n",str);

 

       char *str2 = Reverse(str);

 

       printf("结果string222=.>>> %s\n\n",str);

 

       return 0;

}

 

 

初始string=.>>> I come from NanJing

 

全盘翻转str=..>> gniJnaN morf emoc I

 

部分翻转str=..>> NanJing morf emoc I

部分翻转str=..>> NanJing from emoc I

部分翻转str=..>> NanJing from come I

部分翻转str=..>> NanJing from come I

部分翻转str=..>> NanJing from come I

 

结果string222=.>>> NanJing from come I

 

Press any key to continue

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多