• 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",' ');
      }
    }
  • 相关阅读:
    对象不支持此属性或方法
    继承多态
    GetType和typeof的区别
    比较高效的表格行背景变色及选定高亮JS
    C#获取存储过程的Return返回值和Output输出参数值
    删除表中重复记录,只保留一行
    实现自定义的ToolTip
    状态管理之Cookie
    Microsoft SQL Server,错误: 5120
    IE/Firefox中全局正则表达式的兼容
  • 原文地址:https://www.cnblogs.com/zy666/p/10504364.html
Copyright © 2020-2023  润新知