逆转字符串

下面我们看一组代码

#include <stdio.h>
#include <string.h>

void nidao(unsigned char* s)

{
    int leng = strlen((char*)s);
   
// 计算字符串‘s’的长度,并赋值给leng;
    unsigned char re[2000];       //声明一个临时数组re 以存储反转后的字符串。假设输入字符的                                                          最大长度为2000。
    unsigned char* p1 = s;         //p1 指向输入字符串的开头;
    unsigned char* p2 = re + leng;  //p2 最初指向 tmp 数组的末尾;
    *p2-- = 0;         //将空终止符赋给 tmp 数组的末尾,表示反转字符串的结束

    while (*p1)      //使用 while 循环遍历输入字符串的每个字符

{
        if (*p1 < 0x80)
{  // ASCII字符,字符串小于127的
            *p2-- = *p1++;
        }

else {
            *(p2 - 1) = *p1++;
            *p2 = *p1++;
            p2 -= 2;
        }
    }

    for (int i = 0; i < leng; i++)

{
        s[i] = re[i];   
//
将反转后的字符串从re数组复制回原始数组 (s);
    }
}

int main()

{
    unsigned char str[] = "我是小萌新";
    nidao(str);
    printf("result: %s\n", str);

    return 0;
}

strlen 函数是C语言标准库中的一个函数,用于计算字符串的长度。

(char*)s 这部分是一个类型转换。它将 s 从无符号字符指针类型转换为字符指针类型。

当你逆转一个字符串时,如果直接在原始字符串上进行修改,可能会导致错误的结果,因为逆转过程涉及到交换字符的位置。为了避免这种问题,通常会创建一个临时数组,将逆转后的字符存储在其中,然后再将结果复制回原始数组。

这段代码中使用了两个指针 p1p2,分别指向原始字符串和临时数组的末尾。通过在循环中逐个字符处理,将字符逆转后存储在 re 数组中。最后,通过循环将 re中的字符复制回原始数组,实现字符串的逆转。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值