山東科技大學OJ提取略縮詞
阿新 • • 發佈:2019-01-14
從這題就可以看出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檔案 裡面就是執行結果。大家不妨可以試一試哈;