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;
}

發佈了75 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章