逆置字符串,标点不倒置//输入I love you.//输出you. love I

#include <stdio.h>
#include <assert.h>
#include <string.h>
void reverse(char* left, char* right)
{
    assert(left);
    assert(right);
    while (left < right)
    {
        char tmp = *left;
        *left = *right;
        *right = tmp;
        left++;
        right--;

    }

}
int main()
{
    //①先整体逆序:I love you.-->.uoy evol I
    //②然后把每个单词逆序--->you. love I
    char arr[101] = { 0 };
    gets_s(arr);
    //整体逆序:
    int len = strlen(arr);
    reverse(arr, arr + len - 1);//arr首元素地址即left,arr+len-1即最后一个元素的地址
    //逆序每个单词:就是找到每个单词的起始地址,然后调用上边的reverse函数,就实现单词逆序  //了
    //start记录每个单词起始地址 end记录每个单词结束位置,end如何确定:就是从start开始,      //要不是空格就一直往后走,遇到空格了就说明一个单词结束了。
    //遇到空格跳过去,新的end,赋给start就是一个新单词了
    char* start = arr;
    while (*start)
    {
        char* end = start;
        while (*end != ' '&&*end!='\0')
        {
            end++;
        }
        reverse(start, end - 1);//end是空格的地址,所以end-1才是单词的尾地址
        while ((*end) == ' '&&*end!='\0')//这里如果一个单词中间有不止一个空格,就需要判断一下,                                                            //直到他指向的不是空格了,再把end赋给start,
                                         //如果end指向字符串最后一个单词就没必要再加l,所以加了个判断                                                 //*end!='\0'
        {
            end++;
        }
        start = end;
    }
    printf("%s\n", arr);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值