鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 编程语言开发 > c++ > >

字符串翻转

来源:互联网 作者:佚名 时间:2016-06-06 10:06
对任意一个输入字符串,完成前后翻转,本函数的好处,就是支持中英文混排字符串的翻转。 正向扫描输入字符串,判断当前字节是否大于128,确认当前位置是否为汉字的第一个字节,并将当前字节或两个连续字节(这是一个汉字)保存在堆栈中,直到当前字符串处理完
对任意一个输入字符串,完成前后翻转, 本函数的好处,就是支持中英文混排字符串的翻转。


      正向扫描输入字符串,判断当前字节是否大于 128 ,确认当前位置是否为汉字的第一个字节,并将当前字节或两个连续字节(这是一个汉字)保存在堆栈中,直到当前字符串处理完毕。
      对堆栈中的数据进行扫描,逐个字(可以是单字节的 ASCII,也可以是一个汉字)恢复到当前字符串中。 <无>
/*
** 利用堆栈完成拆分字符串后每个字(英文是单字节,中文则是双字节) 的数据保存。
*/
char   *reve_string( char  * str )
{
     char   temp[3] ;  // 准备用来保存出栈的 字 信息
     chr    *s ;       // 输入字符串扫描指针
     int    wset ;     // 正向扫描时,当前字长度计数
     assert( str != NULL);

     s = str ;
     while ( *s )
     {
          if( (*s & 0x80) == 0x80 )  wset = 2 ;
          else   wset  =  1;
          push_stack( s,  wset ) ;    // 将 wset 字节数据保存到堆栈中
          s += wset ;
     }

     // 扫描堆栈中数据,逐个 字 完成数据出栈操作。
     s = str ;
     while ( (n = pop_stack( temp )) > 0 )
    {
        memcpy(s, temp, n );
    }

    return  str ;
}



int  main(int ac, char  *av[] )
{
     char   temp[128];

     if( ac < 2 )
     {
          printf("%s strings\n",  av[0]);
          return 0;
     }

     strcpy(temp, av[1]);

     printf("原字符串=【%s】\n",  temp);
     reve_string( temp );             // 完成 temp 字符串的翻转
     printf("翻转后字符串=【%s】\n", temp);

     return 0;
}
网友评论
<