USTC机试——根据输入的文章进行对应的操作

/*
	中科_2010_1 
*/

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>

#define maxn 101
// 存储每行每个单词 
char str[maxn][maxn][maxn];

int main() {
	// cnt为当前函数,cnt1[i]表示i行的单词数 
	int i=0, j=0, k=0, cnt=0, cnt1[maxn]={0};
	char line[maxn];					// 存储当前行 
	while(gets(line) != NULL) {
		for(i=0; i<strlen(line); ++i) {	// 遍历当前行 
			if(line[i] == ' ') {		// 遇到空格说明当前单词结束 
				str[cnt][j][k] = '\0';
				j++;
				k = 0;
			} else if(isalpha(line[i])) {	// 若为字符,直接输出 
				str[cnt][j][k++] = line[i];
			} else if(line[i] == '!') {		// 若为 !,删除前一个字符 
				k--;
			} else if(line[i] == '*') {		// 若为 *,删除前一行 
				int a, b; 
				for(a=0; a<j; ++a) {	// 将本行已处理字符复制到上一行 
					for(b=0;str[cnt][a][b]!='\0'; ++b) {
						str[cnt-1][a][b] = str[cnt][a][b];
					}
				}
				for(b=0;b<k;b++)str[cnt-1][j][b]=str[cnt][j][b];
				cnt--;						// 行数-1 
			} else if(line[i] == '>') {		// 若为 >,大小写互换 
				if(str[cnt][j-1][0]>='a' && str[cnt][j-1][0]<='z') {
					str[cnt][j-1][0] -= 32;	// 小写转大写 
				} else {					// 大写转小写 
					str[cnt][j-1][0] += 32;
				}
			}
		}
		cnt1[cnt] = j;						// 记录每行单词数 
		cnt++;								// 记录行数 
		j = 0;								// 初始化 
		k = 0;
	}
	for(i=0; i<cnt; ++i) {					// 输出 
		for(j=0; j<=cnt1[i]; ++j) {
			printf("%s ", str[i][j]);
		}
		printf("\n");
	}

	return 0;
}

全部评论

相关推荐

头像
10-15 22:27
已编辑
门头沟学院 C++
罗格镇的小镇做题家:我投了hr打电话来说学历太低了不符合要求,建议投荣耀,结果荣耀也投了一定水花没有,非本211硕
投递华为等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务