九度OJ-1525 子串逆序打印
- 题目描述:
-
小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串的每个子串都打印反了,现在麻烦你帮小明将这些字符串中的子串修正过来,同时为了使卡片美观,压缩其中的连续空格为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 ****************************************************************/