POJ1035 Spell checker

就是一道暴力题

开数组时一万开成了一千,一直报错,想了好久才发现,>﹏<

#include<cstdio>
#include<cstring>
using namespace std;
char dic[10005][20], check[55][20];
int cnt = 0, num = 0;
void solve(int i)
{
    for(int j = 1; j <= cnt; j++){
        if(strlen(dic[j]) == strlen(check[i])){
            int tmp = 0;
            for(int k = 0; k < strlen(dic[j]); k++){
                if(dic[j][k] != check[i][k]) tmp++;
            }
            if(tmp == 1) printf(" %s",dic[j]);
        }
        else if(strlen(dic[j])+1 == strlen(check[i])){
            int p = 0, k;
            for(k = 0; k < strlen(check[i]); k++){
                if(dic[j][p] == check[i][k]) p++;
            }
            if(k-p == 1) printf(" %s",dic[j]);
        }
        else if(strlen(dic[j])-1 == strlen(check[i])){
            int p = 0, k;
            for(k = 0; k < strlen(dic[j]); k++){
                if(dic[j][k] == check[i][p]) p++;
            }
            if(k-p == 1) printf(" %s",dic[j]);
        }
    }
}
int main()
{
    for(int i = 1;; i++){
        scanf("%s",dic[i]);
        if(dic[i][0] == '#') break;
        ++cnt;
    }
    for(int i = 1;; i++){
        scanf("%s",check[i]);
        if(check[i][0] == '#') break;
        ++num;
    }
    for(int i = 1; i <= num; i++){
        int flag = 0;
        for(int j = 1; j <= cnt; j++){
            if(strcmp(dic[j],check[i]) == 0){
                flag = 1;
                break;
            }
        }
        if(flag == 1){
            printf("%s is correct\n",check[i]);
        }
        else{
            printf("%s:",check[i]);
            solve(i);
            printf("\n");
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/kkjy_00/article/details/87819095