从这题就可以看出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文件 里面就是运行结果。大家不妨可以试一试哈;