山东科技大学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文件 里面就是运行结果。大家不妨可以试一试哈;

猜你喜欢

转载自blog.csdn.net/weixin_43820496/article/details/85030410
今日推荐