1. 程式人生 > >山東科技大學OJ提取略縮詞

山東科技大學OJ提取略縮詞

在這裡插入圖片描述
從這題就可以看出C語言的侷限性了,太多的變數,稍不留神就會看錯,先上程式碼:

#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <ctype.h>
#define FIND_SUO 0
#define TESTSUO 1
#define TESTQ 2
#define FRER freopen("i.txt", "r", stdin)
#define N 100000
char w[N];
int e = 0;
int cnt = 0;
void input()
{ char ch; while((ch = getchar()) != EOF) { w[e++] = ch; } } void search() { int l=0,r=0; int ql = 0, qr = 0; int flag = FIND_SUO; int cur = 0; int i; for( i = 0; i < e; i++) { if(flag == FIND_SUO) { if(isupper(w[i]) && !isalpha(w[
i-1])) { flag = TESTSUO; l = r = i; } } else if(flag == TESTSUO) { if(isupper(w[i])) r++; else if(w[i] == ' ') { flag = TESTQ; ql = qr = i + 2; cur = 0; i+
=1; } else flag = FIND_SUO; } else if(flag == TESTQ) { if(w[i] == ')') { flag = FIND_SUO; if(cnt == 0) { puts("Abbreviation ==> Full Name"); } cnt++; printf("%d:", cnt); int tab = 10; if(cnt >= 10) tab--; tab -= (r - l + 1); while(tab--) putchar(' '); for(i = l; i <= r; i++) { printf("%c", w[i]); } printf(" ==> "); for(i = ql; i <= qr-1; i++) { putchar(w[i]); } putchar('\n'); } if(w[i-1] == '(' || w[i-1] == ' ' || w[i-1] == '-') { if(toupper(w[i]) == w[l + cur]) { cur++; } else { flag = FIND_SUO; } } qr++; } } } int main() { input(); search(); if(cnt == 0) printf("There is no abbreviations in this text.\n"); return 0; }

在這裡先教大家一個處理多資料的方法就是用freopen(“i.txt”, “r”, stdin) 函式,將資料儲存在i.txt檔案中這個檔案需要自己新建一個,不然程式找不到就很尷尬累,在以後的每次執行中都不需要每次都輸入了,直接就可以看見執行結果;
類似的如果要處理輸出格式問題就可以採用freopen(“out.txt”, “w”, stdout)這個函式,之後再程式碼儲存的資料夾裡就會自動生成一個out.txt檔案 裡面就是執行結果。大家不妨可以試一試哈;