C语言笔试题:将字符串中的单词倒序

题目描述:现有一个字符串如:I love you, 请写一个功能函数将这个字符串中的单词反序,处理结果:you love I

思路:

1.首先我们先用两个指针指向字符串的首和尾,定义一个数组存放倒序后的字符串

2.从字符串最后一个单词末尾开始,先将一个单词逆序放置,用一个变量记录这个单词的长度,然后当一个单词倒序放置结束后,我们将这个单词再次进行逆序还原

3.再定义一个指针指向下一个单词的开头位置,方便对下一个单词的逆序操作。

 代码如下:

#include <stdio.h>
#include <string.h>
char* wordSort(char *str)
{
    if(NULL==str)
        return NULL;
    static char buf[64]={0};
    char *front=buf;
    int i=0;
    int count=0;
    char *p=str;
    char *q=str;
    char tmp;
    //将指针Q指向字符串最后一个字母
    while('\0'!=*q)
        q++;
    q--;
    while(p<=q)
    {
        //先将一个完整的单词逆序放置
        if(' '!=*q)
        {
            buf[i]=*q;
            count++;//记录单词长度
        }
        //将逆序放置的单词再逆序变成原来的单词
        else
        {
            char *rear=front+count-1;//指向单词末尾
            while(front<=rear)
            {
                tmp=*front;//交换顺序
                *front=*rear;
                *rear=tmp;
                front++;
                rear--;
            }
            buf[i]=' ';
            front=&buf[i+1];//指向下一个单词开头
            count=0;//单词长度清零记录下一个单词长度
        }
        q--;
        i++;
    }
    printf("%s\n",buf);
    return buf;
}
int main(int argc, char *argv[])
{ 
    char ptr[20]="I LOVE YOU";
    char *p=wordSort(ptr);
    printf("%s\n",p);
    return 0;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值