将一串字符(hello world I am c_player)反转为(c_player am I world hello)

来源:互联网 发布:(综琼瑶)知君用心 编辑:程序博客网 时间:2024/06/06 00:11

hello world I am c_player >> c_player am I world hello

如果将转换后的字符串中的每个单词进行反转得到
reyalp_c ma I dlrow olleh
可以看到此时的字符串正好是原字符串整体的反转

由此可以得到思路

先将原字符串中每个单词进行反转,然后对其整体在进行反转,便可以得到目标串。

代码:

void work(char *str, int len){    char *p, *q;    p = str;    q = str + len - 1;  //指向单词末尾    while((p-q) < 0)    {        char tmp ;        tmp = *p;        *p = *q;        *q = tmp;        p++;        q--;    }}void  fun(char *str){    int len = strlen(str);    char *p = str;    char *tmp;    tmp = p;    int i;    while(*p != '\0') // 对出去最后一个单词外的单词进行反转    {        if(*p == ' ')        {            i = p - tmp;            work(tmp,i);  //进行反转的函数            tmp = p + 1;        }        p++;    }    work(tmp,p-tmp); //对最后一个单词进行反转    work(str,len);   //对整个字符串进行反转}int main(int ac, char **av){    char a[100] = "hello world I am c_player";    printf("a[]:%s\n",a);    fun(a);     printf("later:%s\n",a);}

效果
这里写图片描述

0 0