如何将字符串逆序

方法一:普通逆序。直接分配一个与愿字符串登场的字符数组,然后反向拷贝即可。

代码如下:

#include "stdafx.h"

#include <stdio.h>

char *Reverse(char *s)

{

    char *q = s;

    while (*q)q++;

    q=q-1;

    char *p = new char[sizeof(char)*(q - s + 2)];

    char *r = p;

    //逆序存储

    while (q >= s)

    {

        *p = *q;

        p++;

        q--;

    }

    *p = '\0';

    return r;

}

int main()

{

    char a[] = "abcd";

    int len = sizeof(a) / sizeof(a[0]);

    printf("%s\n", Reverse(a));

    getchar();

    return 0;

}

方法二:双指针原地逆序。设置两个指针,分别指向字符串的头部和尾部,然后交换两个指针所指的字符,并向中间移动指针直到交叉。

代码如下:

#include "stdafx.h"

#include <stdio.h>

char *Reverse(char *s)

{

    char *p = s;

    char *q = s;

    while (*q) q++;

    q--;

    while (q > p)

    {

        char t = *p;

        *p = *q;

        p++;

        *q = t;

        q--;

    }

    return s;

}

int main()

{

    char a[] = "abcd";

    printf("%s\n", Reverse(a));

    getchar();

    return 0;

}

方法三:递归原地逆序。指定逆序区间,借用一个中间变量,每次将首尾字符互换。

代码如下:

#include "stdafx.h"

#include <stdio.h>

char *Reverse(char *s, int left, int right)

{

    if (left >= right)

        return s;

    char t = s[left];

    s[left] = s[right];

    s[right] = t;

    Reverse(s, left + 1, right - 1);

}

int main()

{

    char a[] = "abcd";

    printf("%s\n", Reverse(a,0,3));

    getchar();

    return 0;

}

方法四:非递归原地逆序。指定逆序区间,使用while循环从两头开始不断交换首尾字符,直到全部交换完毕。

    代码如下:

#include "stdafx.h"

#include <stdio.h>

char *Reverse(char *s, int left, int right)

{

    while (left < right)

    {

        char t = s[left];

        s[left] = s[right];

        left++;

        s[right] = t;

        right--;

    }

    return s;

}

int main()

{

    char a[] = "abcd";

    printf("%s\n", Reverse(a, 0, 3));

    getchar();

    return 0;

}

方法五:异或原地逆序。先将要交换的两个变量异或,结果保存在其中一个变量中。然后与另一个变量异或并将结果赋值给该变量,再与该变量异或并将结果赋值给另一个变量。

代码如下:

#include "stdafx.h"



#include <stdio.h>



char* Reverse(char* s)



{



char* r = s;



char* p = s;



while (*(p + 1) != '\0') ++p;



while (p > s)



{



*p = *p^*s;



*s = *p^*s;



*p = *p^*s;



s++;



p--;



}



return r;



}



int main()



{



char a[] = "abcd";



int len = sizeof(a) / sizeof(a[0]);



printf("%s\n", Reverse(a));



getchar();



return 0;



}

方法六:结束符做交换空间,即使用字符串结束符\0所在的位置作为交换空间,交换完毕后再将其置为\0

代码如下:

#include "stdafx.h"

#include <stdio.h>

char* Reverse(char* s)

{

    char* r = s;

    char* p = s;

    while (*p != '\0') p++;

    char* q =p - 1;

    while (q > s)

    {

        *p = *q;

        *q = *s;

        *s = *p;

        s++;

        q--;

    }

    *p = '\0';

    return r;

}

int main()

{

    char a[] = "abcd";

    printf("%s\n", Reverse(a));

    getchar();

    return 0;

}

    效果如图:

如何将字符串逆序

你可能感兴趣的:(字符串)