逆转中文字符串-->逆转字符串

要显示中文必须使用unsigned char型,如果使用char 就装不下了。

然后要明白一个unsigned char 其实只是装了一个中文字符的一半。打印的时候如果只打印一个unsigned char有可能什么都看不到。所以逆转的时候要把两个unsigned char看成一个整体来交换。代码如下:

 

 #include    < iostream >
using   namespace  std;
 
int    main( void )     
 {     
           unsigned 
char   *  string1  =   new  unsigned  char [ 20 ];
           unsigned 
char * b ,  *  p;
           b 
=  p  =  string1;
           
while ( * p)     
         {
              
             
p ++ ;
         
         }
         
             p
= p - 2 ;
        
while (p > b)
        {
            swap(
* p, * b);
             p
++ ;
            b
++ ;
           swap(
* p, * b);
           p 
=  p - 3 ; // 转到下一个中文字符的第一个unsigned char
           b ++ ;
        }
         cout 
<<  string1;
        
return   0 ;
}

 

其中的while(*p){p++;}p-=2;也可以用p = &string1[strlen(string1)-2]代替。。

 

char *  Reverse( const   char   *  str)
{
    
if(str == NULL)
        
throw "Null point";
    
int size = strlen(str);
    
if(size == 0)
        
return "";

    
const char *= str;
    
char * newStr = new char[size+1];
    
char * temp = newStr;
    
    
while(*p++);
    p 
= p-2;// 到达末尾的非'/0'字符
    int i = 0;
    
while(p!=str && i <size )
    
{
        unsigned 
char *= (unsigned char*)p;
        
if(*> 0x7f)
        
{
            
//DBCS
            *temp++ = *--p;
            
*temp++ = *++p;
            p 
= p-2;
            i
+=2;
        }

        
else
        
{
            
//SBCS
            *temp++ = *p--;
            i
++;
        }

    }

    
if(i<size)
    
{
        
*temp++ = *str;
    }

    
*temp = '/0';
    
return newStr;

}

 

同时发现一个CSDN插入代码的bug。当插入代码中出现‘/0’的时候就会截断。所以我只能用'//0'代替了。

当字符串中有DBCS双字节字符时,使用同时转换两个。当有SBCS单字节字符串时转换一个。

(但是有些DBCS字符是占用两个以上空间的。但是没有考虑)这只是个简单的转换。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值