linux 中 句子的逆序“you are from yangzhou”

关于句子的逆序,我们首先想到的是把它们先逆序过来,然后找到空格,定义3个指针p1,p2,p3,先用俩个指针来完成句子的逆序,在用p2跑完整个句子,遇到空格就”报告“一次,再将p2空格前的值 赋给指针,再来完成单个句子的逆序。

#include <stdio.h>
#include <string.h>

int main()
{
    // char *p = "i am are from yangzhou";
    // char str[] = "i am from yangzhou";
    char str[] = "you are from yangzhou";

    // 将整个字符串逆序
    char *p1 = str;
    char *p2 = str + strlen(str) - 1;
    char *p3 = NULL;  // 用于将单词逆序
    char tmp;
    while (p1 < p2)
    {
        tmp = *p1;
        *(p1++) = *p2;
        *(p2--) = tmp;
    }
    puts(str);

    // 再将每一个单词进行逆序,单词通过空格去找
    p1 = str;
    p2 = str;

    while(*p2) // p2找到字符串结束为止
    {
        if (*p2 == ' ') // 找到一个单词,要将前面的单词进行逆序
        {
            p3 = p2 - 1;
            while (p1 < p3)
            {
                tmp = *p1;
                *(p1++) = *p3;
                *(p3--) = tmp;
            }
            p1 = p2 + 1;
        }
        p2++;
    }

    p3 = p2 - 1;
    while (p1 < p3)
    {
        tmp = *p1;
        *(p1++) = *p3;
        *(p3--) = tmp;
    }

    puts(str);

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值