zoukankan      html  css  js  c++  java
  • PAT(乙级)1009

    1009. 说反话 (20)
    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

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

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

    输入样例:
    Hello World Here I Come
    输出样例:

    Come I Here World Hello

    分析:这串字符串中的每个单词之间都有一个空格,可以通过空格来判断单词的分割。记录每一个空格出现的位置。

    然后颠倒去输出单词即可。做法是给开头和末尾也模拟一个空格,使得每一个单词都包含的两个空格之间,使得程序可以统一去处理这些单词的输出。而不用考虑开头和结尾的特殊情形。

    代码如下

    #include<stdio.h>
    #include<string.h>
    
    #define size 81
    
    void print(int a ,int b,char *p);//打印函数
    
    int main(void)
    {
      char temp[size];
      gets(temp);
      int num[size];
      int k = 1;
      num[0] = -1;//由于空格不输出,因此这里设置为-1,把初始位置当做一个空格。
      for(int i = 0; i < strlen(temp);i++)
    {
        if(' ' == temp[i])
        {
          num[k++] = i;//记录空格位置
        }
      }
      num[k] = strlen(temp);//把最后的末位置也当做一个空格
    //到此为止,我们num数组之中记录的都是空格的位置,而且开头和结尾也都包含着两个空格之间。
      for(int i = k; i >= 1; i--)
      {
        print(num[i-1] + 1,num[i] - 1,temp);
      }
    
      return 0;
    }
    void print(int a ,int b,char *p)
    {
      for(int i = a; i <= b ; i++)
      {
        printf("%c",p[i]);
      }
      if(0 != a)//最后一个单词后面不能有空格。
      {
        printf("%c",' ');
      }
    }
  • 相关阅读:
    Bootstrap(2)整体架构
    介绍 Microservice
    Websocket实例
    MYSQL-用户权限的验证过程(转)
    don't touch your phone in any unfamiliar way(转)
    你真的会玩SQL吗?Case的用法(转)
    android模拟器与PC的端口映射(转)
    Java Main如何被执行?(转)
    Linux crontab 命令格式与具体样例
    分享一个3D球面标签云
  • 原文地址:https://www.cnblogs.com/zy666/p/10504364.html
Copyright © 2011-2022 走看看