C语言实现字符串翻转

题目描述:
        有一个字符数组的内容为:”student a am i”,请你将数组的内容改为”i am a student”. 要求:
        不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。

解题思路:
        1、先将这个字符串进行翻转,翻转后得到“i ma a tneduts”;
        2、对每一个单词进行翻转;

代码实现:

#include 
#include 

void reverse(char* p, int left, int right)
{
    char tmp = 0;
    while (left < right)
    {
        tmp = *(p + left);
        *(p + left) = *(p + right);
        *(p + right) = tmp;
        left++;
        right--;
    }
}

int main()
{
    char arr[] = "student a am i";
    int left = 0;
    int src = strlen(arr) - 1;
    int right = 0;
    char* tmp = arr;
    reverse(arr, left, src);//先对字符串进行翻转
    while (*tmp != '\0')
    {
        left = right;
        while (*tmp != ' ' && *tmp != '\0')
        {
            right++;
            tmp++;
        }
        reverse(arr, left, right - 1);//对每一个字符串进行翻转
        if (*tmp != '\0')
        {
            tmp++;
        }
        right++;
        left++;
    }
    printf("%s\n", arr);
    return 0;
}

运行结果:
C语言实现字符串翻转_第1张图片

你可能感兴趣的:(C语言实现字符串翻转)