将一个字符串逆序

将一个字符串逆序有多重方式实现,下面的三种方式均是在原字符串上操作。

方式一.使用数组的方式操作

 1 char *reversestr(char *str)
 2 {
 3     char *temp = str;
 4     int indexLeft = 0;
 5     int indexRight = 0;
 6     if (str == NULL)
 7     {
 8         return NULL;
 9     }
10     while(*temp != '\0')
11     {
12         indexRight++;
13         temp++;
14     }
15     //指向最后一个字符'\0'的前一个
16     indexRight = indexRight - 1;
17     
18     while(indexRight > indexLeft)
19     {
20         char temp = str[indexLeft];
21         str[indexLeft++] = str[indexRight];
22         str[indexRight--] = temp;
23     }
24 
25     return str;
26     
27 }

 


方式二 .使用指针的方式操作

char *reverseStr(char *str)
{
    char *left = str;
    char *right = str;
    if(str == NULL)
    {
        return NULL;
    }
    while (*right != '\0')
    {
        right++;
    }
    right--;
    while (right > left)
    {
        char temp = *right;
        *right++ = *left;
        *left++ = temp;
    }
    return str;
}

 

方式三.不使用第三的变量 

 1 char *reversestr1(char *str)
 2 {
 3     char *left = str;
 4     char *right = str;
 5     if (str == NULL)
 6     {
 7         return NULL;
 8     }
 9     while(*right != '\0')
10     {
11         right++;
12     }
13     right--;
14     /*使用异或运算的特点 a = a^b^b b = a^b^a */
15     while (right > left)
16     {
17         *left = *left ^ *right;
18         *right = *left ^ *right;
19         *left = *left ^ *right;
20         left++;
21         right--;
22     }
23     return str;
24 }

 

转载于:https://www.cnblogs.com/jianghg/p/4495004.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值