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

来源:互联网 发布:上财大数据经济学 编辑:程序博客网 时间:2024/05/18 01:24
题目要求:
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。(注意处理在输入字符串时的回车字符)
输入:需反转的字符串
输出:按照要求反转后的字符串
示例:例如输入“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\n");
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 = '\0';
     //str++;
     while(k > 0)//回到str的头部
     {
          str--;
          k--;
     }
#endif
     while(*str != '\0')//将字符串中的空格都转换为回车
     {
          if(*str != 32)//与空格的ascii码32比较
          {
               str++;
          }
          else//是空格则换成'\0'
          {
               *str = '\0';
               i++;
               str++;
          }
     }
     str--;
     i++;//当字符串中单词数为2时,只有一个空格,故要将空格数+1才与单词数相同
     while(i >= 0)
     {
          while(*str != '\0')//从后向前寻找单词,单词有i+1个,以'\0'隔开
               str--;
          str++;
          printf("%s ", str);//打印找到的单词
          str--;
          str--;
          i--;
     }
     printf("\n");
     free(str);
     return 0;
}


原创粉丝点击