ZOJ 1151 Word Reversal
2014-05-04 16:11
357 查看
题目大意:
现有多个测例(测例数题中给出),每个测例中都会输入一篇文章,会给出文章的行数N(int型),然后给出文章中每行的内容,现要求把每行中的单词反转,其余不动,然后输出,输出时测例之间有空行,最后一个测例后没有空行。
题目链接
注释代码:
无注释代码:
单词解释:
reversal:n, 逆转,反转
现有多个测例(测例数题中给出),每个测例中都会输入一篇文章,会给出文章的行数N(int型),然后给出文章中每行的内容,现要求把每行中的单词反转,其余不动,然后输出,输出时测例之间有空行,最后一个测例后没有空行。
题目链接
注释代码:
/* * Problem ID : ZOJ 1151 Word Reversal * Author : Lirx.t.Una * Language : C * Run Time : 0 ms * Run Memory : 168 KB */ #include <string.h> #include <stdio.h> //表示当前指针是在一个单词内还是在一个单词外 #define IN 1 #define OUT 0 //经测试的每行最大长度 #define MAXLEN 50 char s[MAXLEN];//string,用于存储一行 void srev( char *st, char *en ) {//string reverse,单词反转 //分别为start和end指针 char ch;//临时变量 while ( st < en ) {//交换 ch = *st; *st++ = *en; *en-- = ch; } } int main() { int t;//测例数 int n;//行数 int l;//一行的长度(即字符个数,包括空格等) int st, en;//start和end指针 int flag;//标志,表示当前指针处于单词内还是单词外 int i;//扫描指针 scanf("%d", &t); while ( t-- ) { scanf("%d\n", &n); while ( n-- ) { flag = OUT;//每行扫描开始都将指针设为在单词外 gets(s);//获取一行 l = strlen(s); for ( i = 0; i <= l; i++ ) { //之前指针在单词外,并且当前指针不指向空格或者字符串结尾标志 if ( OUT == flag && s[i] != ' ' && s[i] ) {//则表示刚刚进入一个单词 st = i;//设定start flag = IN;//改变标记 continue; } //表示指针仍然在当前单词内 if ( IN == flag && s[i] != ' ' && s[i] ) continue; //之前还在单词内的,但是当前指针指向空格或者字符串结尾标志 if ( IN == flag && ( ' ' == s[i] || !s[i] ) ) { //这就表示刚刚退出一个单词 en = i - 1;//记录结尾 flag = OUT;//该表标记 srev( s + st, s + en );//并对筛选的单词进行翻转 continue; } } puts(s);//打印一行 } if (t) putchar('\n');//输出测例之间空一行,最后一个测例后没有空行 } return 0; }
无注释代码:
#include <string.h> #include <stdio.h> #define IN 1 #define OUT 0 #define MAXLEN 50 char s[MAXLEN]; void srev( char *st, char *en ) { char ch; while ( st < en ) { ch = *st; *st++ = *en; *en-- = ch; } } int main() { int t; int n; int l; int st, en; int flag; int i; scanf("%d", &t); while ( t-- ) { scanf("%d\n", &n); while ( n-- ) { flag = OUT; gets(s); l = strlen(s); for ( i = 0; i <= l; i++ ) { if ( OUT == flag && s[i] != ' ' && s[i] ) { st = i; flag = IN; continue; } if ( IN == flag && s[i] != ' ' && s[i] ) continue; if ( IN == flag && ( ' ' == s[i] || !s[i] ) ) { en = i - 1; flag = OUT; srev( s + st, s + en ); continue; } } puts(s); } if (t) putchar('\n'); } return 0; }
单词解释:
reversal:n, 逆转,反转
相关文章推荐
- ZOJ 1151 Word Reversal反转单词 (string字符串处理)
- ZOJ Problem Set - 1151 Word Reversal
- I - Word Reversal ZOJ - 1151
- ZOJ-1151 Word Reversal,栈的解法
- ZOJ 1151: Word Reversal
- ZOJ Problem Set - 1151||Word Reversal
- zoj 1151 Word Reversal
- zoj 1151 Word Reversal-------------输入输出超时
- zoj 1151 Word Reversal
- ZOJ——1151 Word Reversal
- zoj 1151 Word Reversal
- ZOJ 1151 Word Reversal反转单词 (string字符串处理)
- ZOJ 1151 - Word Reversal(字符串反转)
- ZOJ Problem Set–1151 Word Reversal
- php - zoj 1151 Word Reversal
- zoj 1151 Word Reversal(字符串操作模拟)
- ZOJ-1151 Word Reversal
- ZOJ 1151 Word Reversal
- zoj 1151 Word Reversal
- ZOJ 1151 Word Reversal