• 一个面试题:翻转句子中单词的顺序


    题目要求:
    输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。(注意处理在输入字符串时的回车字符)
    输入:需反转的字符串
    输出:按照要求反转后的字符串
    示例:例如输入“I am a student.”,则输出“student. a am I”

    自己写的代码如下:仅供参考,如有错误和不妥之处,请大家指正。

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

    int main(int argc, const char *argv[])
    {
         char *str = NULL;
         int i = 0;
         int k = 0;
         char ch;

         str = (char *)malloc(128*sizeof(char));//给str分配堆空间
         if( str == NULL )
     {
    printf("malloc error ");
    return -1;
     } 
        memset(str, 0, 128);

    //     gets(str);//输入方案一
    #if 1//输入方案2
         while(((scanf("%c", &ch) == 1)) && (ch != 10))//当scanf与ch!=10调换位置后,会出问题,导致'/n'被写入str,调试中用到了下面被//注掉的代码,去掉尾部的'/n'
         {
              *str++ = ch;
              k++;
         }
         //str--;
         //*str = '';
         //str++;
         while(k > 0)//回到str的头部
         {
              str--;
              k--;
         }
    #endif
         while(*str != '')//将字符串中的空格都转换为回车
         {
              if(*str != 32)//与空格的ascii码32比较
              {
                   str++;
              }
              else//是空格则换成''
              {
                   *str = '';
                   i++;
                   str++;
              }
         }
         str--;
         i++;//当字符串中单词数为2时,只有一个空格,故要将空格数+1才与单词数相同
         while(i >= 0)
         {
              while(*str != '')//从后向前寻找单词,单词有i+1个,以''隔开
                   str--;
              str++;
              printf("%s ", str);//打印找到的单词
              str--;
              str--;
              i--;
         }
         printf(" ");
         free(str);
         return 0;
    }


  • 相关阅读:
    分类和预测
    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
    字符串匹配的KMP算法
    灰度共生矩阵提取纹理特征源码
    redis永不过期,保留最新5条数据,StringUtils.join()等总结
    Session问题以及解决方案
    spring boot 配置 log4j2
    每日知识记载总结54
    spring cloud踩坑指南
    每日知识记载总结53
  • 原文地址:https://www.cnblogs.com/vonyao/p/3614331.html
Copyright © 2020-2023  润新知