[每日一题]C语言:将输入的一句话的单词倒置,但标点符号不倒置

题目内容

  1. 牛客网上刷题碰到的:将一句话的单词进行倒置,其中标点符号不倒置.
  2. 例如输入一句话"I Love Beijing."要求输入为:"Beijing. Love I"

题目分析

刚开始看到这个题目的时候,脑子里没有思路:
1. 如何计算出输入的单词的长度并进行翻转
2.如何将标点符号做到不随单词进行翻转

认真考虑了之后,觉得可以分为以下几个步骤:

  1. 字符串的整体翻转
    将输入的"I Love Beijing.“翻转成”.gnijieB ekiL I"
  2. 单词的逆序翻转
    在上步的基础上,将单词进行翻转,".gnijieB ekiL I"翻转成"Beijing. Like I"

代码实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
void reverse(char*left,char*right)
{
  char tmp=0;
  while(left<right)
  {
    tmp=*left;
    *left=*right;
    *right=tmp;
    left++;
    right--;
  }
}
int main()
{
  char arr[100]={0};
  //用库函数gets(),获取字符串
  gets(arr);
  int len=strlen(arr);
  //接下来定义一个reverse函数,翻转功能用这个函数实现
  //第一步实现字符串的整体翻转
  reverse(arr,arr+len-1);
  //单词翻转
  char*start=arr;
  while(*start)
  {
       char*end=start;
       while(*end!' '&&*end!='\0')
       {
        end++;
       }
  //识别到' '或者是字符串的终止字符'\0',进行翻转操作
       reverse(start,end-1);
       if(*end==' ')
        start=end+1;
       else
        start=end;
  }
  printf("%s\n",arr);
  return 0;
}

程序思考

这个代码说难不难,说简单也不是很简单,想在这里跟大家分享一下以下经验:

  1. 在输入字符串的时候,不能采用scanf输入,要采用库函数中的gets()函数输入
    刚开始我在输入一段字符串时,也是采用了scanf()函数进行输入,最后发现结果不对.经过调试发现,scanf()函数在输入时,碰到’ ‘或者是’\0’就停止输入后面的字符了,导致我们在输入"I Love Beijing."时,编译器中只输进去了’I’,结果当然也是错的.
    在这里插入图片描述
  2. 在进行单词翻转中,要用if语句判断一下,终止点是’ '还是‘\0’
    刚开始,我在最后判断的时候,没有判断最后end是‘ ’还是’\0’,统一将start=end+1,这样就带来了问题:
    假如我识别到’\0’,但是我仍然将start置为end+1,将’\0’跳了过去,这样就有可能会导致结果发生错误,所以为了让结果更加严谨,采用下面的这种方式:
       if(*end==' ')
        start=end+1;
       else
        start=end;

- 谢谢大家,希望对大家有所帮助!

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡须不排序H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值