有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
#include<stdio.h>
void reverse(char* x, char* y)//逆置函数,会逆置给定空间里的字符
{
    while (x < y)
    {
        *x = *x ^ *y;
        *y = *x ^ *y;
        *x = *x ^ *y;
        x++;
        y--;
    }
}
int main()
{
    char arr[] = "student a am i";
    int sz = sizeof(arr) / sizeof(arr[0]);
    char* p = arr;
    char* q = p;
    reverse(arr, arr + sz - 2);//先全部逆置
    //用‘ ’判断并且局部逆置
    while (*p != '\0' && *q != '\0')
    {
        if (*q == ' ')
        {
            reverse(p, q - 1);
            q++;
            p = q;
        }
        q++;
    }
    reverse(p, q - 1);//逆置最后一个单词
    printf("%s\n", arr);//打印数组
    system("pause");
    return 0;
}
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭