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

本文介绍了一种使用 C++ 实现的中文字符串逆序方法。通过将 unsigned char 类型用于存储和处理中文字符,并以两个 unsigned char 为单位进行逆序处理,确保了中文字符的正确逆序。此外,还提供了一段示例代码来展示如何实现这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要显示中文必须使用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;

}

 

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值