《PTA——拼题A》之第1009题

来源:http://www.adwardx.top/2018/08/05/%E3%80%8APTA%E2%80%94%E2%80%94%E6%8B%BC%E9%A2%98A%E3%80%8B%E4%B9%8B%E7%AC%AC1009%E9%A2%98/

题目介绍

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。

输出格式:每个测试用例的输出占一行,输出倒序后的句子。

输入样例:

Hello World Here I Come

输出样例:

Come I Here World Hello

源代码

#include<stdio.h>
#include<string.h>
int main()
{
  //读入数据
  char szData[100];
  fgets(szData,99,stdin);
  //定义数组长度及单词首尾变量
  int iLength=strlen(szData)-1;
  int iBegin=0,iEnd=iLength-1;
  //倒序遍历
  for(int i=iLength-1;i>-1;i--)
  {
    if(szData[i]==' ')
    {
      //单词开始为空格后一位
      iBegin=i+1;
      //循环输出该单词
      for(int j=iBegin;j<=iEnd;j++)
      {
        printf("%c",szData[j]);
      }
      printf(" ");
      //单词末尾为空格前一位
      iEnd=i-1;
    }
  }
  //输出第一个单词
  iBegin=0;
  for(int j=iBegin;j<=iEnd;j++)
  {
    printf("%c",szData[j]);
  }
  return 0;
}

错误分析

思路

拿到此题后的思路是想着用栈的结构体来实现,可是到后来都没有实现成功。因此转移思想为从最后一个字符开始往前读取,如果为空格,则将空格后面所有的字符进行输出。然后更新指向的标记,直到读到第一个元素为止。

新的知识

fgets(szData,99,stdin);

fgets函数的头文件是<\stdio.h>,原型如下:

char *fgets(char *s, int size, FILE*stream);

fgets从stream中读取最多size-1大小的内容到s指定的buffer中,当遇到换行符或EOF时读取结束。读取成功时,返回s地址;失败时返回null。需要注意的是,fgets会在所读取的内容后面添加’\0’,这样,fgets读取的内容中会包括行末尾的’\n’字符。如果要获取读取字符串的长度,可以调用strlen函数获得。

猜你喜欢

转载自blog.csdn.net/manmandong123/article/details/81431011