题目描述:

小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串的每个子串都打印反了,现在麻烦你帮小明将这些字符串中的子串修正过来,同时为了使卡片美观,压缩其中的连续空格为1个。

输入:

输入包含多个测试用例,每个测试用例的第一行是一个正整数 n,1=<n<=100000,代表卡片上字符串的长度。第二行输入长度为n的字符串(字符串仅包含小写字母和空格)。当n为0时,代表输入结束。

输出:

对应每个测试用例,请按照要求输出修正过的字符串。

样例输入:
3
abc
13
abc   efg hij
样例输出:
cba
cba gfe jih

传送门: http://ac.jobdu.com/problem.php?pid=1525此题有更简单的代码。我是为了练习数据结构,所以用栈做了。
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #define INIT_SIZE 100000
  4 #define INCREMENT 1000
  5
  6 typedef struct SqStack
  7 {
  8     char *top;
  9     char *base;
 10     int stackSize;
 11 }SqStack;
 12
 13 void Init(SqStack *s)
 14 {
 15     s->base = (char *)malloc(sizeof(char));
 16     if(!s->base)
 17         exit(-1);
 18     s->top = s->base;
 19     s->stackSize = 1000;
 20 }
 21
 22 void Push(SqStack *s, char e)
 23 {
 24     //栈满,再分配内存空间
 25     if(s->top - s->base >= s->stackSize)
 26         s->base = (char *)realloc(s->base, (INCREMENT + s->stackSize) * sizeof(char));
 27     if(!s->base)
 28         exit(-1);
 29     *(s->top) = e;
 30     s->top++;
 31 }
 32
 33 int StackLen(SqStack s)
 34 {
 35     return (s.top - s.base);
 36 }
 37
 38 void Pop(SqStack *s, char *e)
 39 {
 40     if(s->top == s->base)
 41         return;
 42     else
 43     {
 44         s->top--;
 45         *e = *(s->top);
 46     }
 47 }
 48
 49 int main()
 50 {
 51     int N;
 52     SqStack sta;
 53     Init(&sta);
 54     char c, tmp;
 55     while(scanf("%d", &N) != EOF)
 56     {
 57         getchar();//吃掉回车
 58         tmp = getchar();
 59         while(tmp != '\n')
 60         {   //当没有遇到空格
 61             //tmp = getchar();
 62             if(tmp == ' ')
 63             {
 64                 //遇到空格先往前处理
 65                 //如果前面有非空字符,则全部弹出
 66                 while(StackLen(sta) != 0)
 67                 {
 68                     Pop(&sta, &c);
 69                     printf("%c", c);
 70                 }
 71                 printf(" ");//输出一个空格
 72                 //再往后处理
 73                 //如果还遇到空格则继续getchar()直到一个非空字符
 74                 while((tmp = getchar()) == ' ')
 75                     continue;
 76                 if(tmp != '\n')
 77                 {
 78                     Push(&sta, tmp);
 79                     tmp = getchar();
 80                 }
 81             }
 82             else
 83             {
 84                 Push(&sta, tmp);
 85                 tmp = getchar();
 86             }
 87         }
 88         //若栈不空
 89         while(StackLen(sta))
 90         {
 91             Pop(&sta, &c);
 92             printf("%c", c);
 93         }
 94         printf("\n");
 95     }
 96     return 0;
 97 }
 98
 99 /**************************************************************
100     Problem: 1525
101     User: zetrov
102     Language: C
103     Result: Accepted
104     Time:80 ms
105     Memory:912 kb
106 ****************************************************************/


转载于:https://www.cnblogs.com/zetrov/p/4370488.html

九度OJ-1525 子串逆序打印相关推荐

  1. 九度OJ 1525 子串逆序打印

    题目1525:子串逆序打印 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:2404 解决:388 题目描述: 小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在 ...

  2. 九度OJ 1525 子串逆序打印 -- 2012年Google校园招聘笔试题目

    题目地址:http://ac.jobdu.com/problem.php?pid=1525 题目描述: 小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串 ...

  3. 九度OJ—题目1525:子串逆序打印

    题目描述: 小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串的每个子串都打印反了,现在麻烦你帮小明将这些字符串中的子串修正过来,同时为了使卡片美观,压缩 ...

  4. python逆序打印出各位数字_Python练习题 024:求位数及逆序打印

    [Python练习题 024] 给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. ---------------------------------------------- ...

  5. 1265. 逆序打印不可变链表

    1265. 逆序打印不可变链表 给您一个不可变的链表,使用下列接口逆序打印每个节点的值: ImmutableListNode: 描述不可变链表的接口,链表的头节点已给出. 您需要使用以下函数来访问此链 ...

  6. 【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序打印字符串 | 递归要素 | 递归停止条件 | 递归操作 )

    文章目录 一.借助 递归函数操作 逆序打印字符串 二.完整代码示例 一.借助 递归函数操作 逆序打印字符串 递归需要掌握下面 222 个点 : 参数入栈模型 : 第 111 次 , "sdh ...

  7. 算法习题---线性表之单链表逆序打印

    一:题目 逆序打印单链表中的数据,假设指针指向单链表的开始结点 二:思路 1.可以使用递归方法,来进行数据打印 2.可以借助数组空间,获取长度,逆序打印数组 3.若是可以,对链表数据使用头插法,逆序排 ...

  8. 每日程序C语言23-求一个正整数的位数并逆序打印

    题目: 给一个不多于5位的正整数,要求:一.求出它是几位数,二.逆序打印出各位数字 程序分析 可以使用数组来存放我们输入的数字,而且在存放前,我们先进行处理,按照要输出的顺序存放进去 主要代码 int ...

  9. 【链表】逆序打印链表

    1 public class Main { 2 3 // 逆序打印链表 4 public void reversePrint(Node node) { 5 if (node == null){ 6 r ...

最新文章

  1. 【笔记】jstree插件的基本使用
  2. 编程语言的发展趋势及未来方向(1):历史回顾及趋势概述
  3. Codeforces Round #701 (Div. 2) C. Floor and Mod 数学分块
  4. python偏函数和高阶函数_【Python入门】8.高阶函数之 匿名函数和偏函数
  5. EduSoHo精品在线教育点播系统网站源码
  6. 设置webstorm实时预览看这一篇就够了,5分钟解决!!
  7. Sharepoint 站点模板和站点定义、定制站点定义
  8. sas编程技术教程 人大经济论坛sas培训
  9. HTML查看器PC,PE文件查看器(PeViewer)
  10. 清华大学计算机夏文韬,太猛了--南京外国语学校2007届高三毕业生去向
  11. 如何识别服务器连接的偶发故障?
  12. Xilinx UCF约束语法一
  13. 计算机教学研修心得英语,研修心得体会(通用10篇)
  14. 可以嵌入ppt的课堂点名器_智慧校园--嵌入式高清全自动录播子系统
  15. 分账系统多少钱?是如何收费的?
  16. 新春寄语——令人期待的2018
  17. Windows10系统VScode连接腾讯云Linux服务器
  18. java sleep 抛出异常_PowerMockito模拟Thread.sleep()时抛出中断异常的场景
  19. 用Javascript开发《三国志曹操传》-零部件开发(四)-用地图块拼成大地图
  20. nport虚拟串口服务器,如何安装配置MOXA NPort串口服务器?

热门文章

  1. [整理]国际学术会议
  2. Android 节日短信送祝福(功能篇:2-短信历史记录Fragment的编写)
  3. Spring bean注入方式
  4. Drupal常用开发工具(二)——Drupal for Firebug
  5. Verilog作业(一)
  6. VS2010 Cocos2d-x 2.2创建模板
  7. Android Lint简介
  8. 初接触设计模式--简单工厂(二)
  9. 初始化git仓库,并push到远端
  10. 9.3. where 优化