拼寫檢查-c++

【問題描述】

       作爲一個新的拼寫檢查程序開發團隊的成員,您將編寫一個模塊,用已知的所有形式正確的詞典來檢查給定單詞的正確性。
       如果字典中沒有這個詞,那麼可以用下列操作中的一個來替換正確的單詞(從字典中):
       1. 從單詞中刪除一個字母;
       2. 用一個任意字母替換單詞中的一個字母;
       3. 在單詞中插入一個任意字母。
       你的任務是編寫一個程序,爲每個給定的單詞找到字典中所有可能的替換。

【輸入形式】

       輸入的第一部分包含所有字典中的詞,每個單詞佔用一行,以一個單一字符“#”作爲結束。所有單詞都不相同,字典中至多1000個單詞。

       接下來的部分包含所有需要進行檢查的單詞,同樣每個單詞佔用一行。這部分也以一個單一字符“#”作爲結束。至多有50個單詞需要檢查。

       在輸入中所有的單詞(字典中的和需要檢查的)都僅由小寫字母組成,每個最多包含15個字符。

【輸出形式】

       對於每個在輸入中出現的單詞,按照它們在輸入的第二部分出現的順序輸出一行。如果該單詞是正確的(也就是說它包含在字典中)則輸出信息:“is correct”;如果該單詞不正確,則首先輸出該單詞,然後輸入符號':'(冒號),之後空一格,寫出它所有可能的替代,以空格分隔。這些替代的單詞按照它們在字典中(輸入的第一部分)出現的順序寫出。如果沒有可替代的單詞,則在冒號後面直接輸出換行。

【樣例輸入】

i
is
has
have
be
my
more
contest
me
too
if
award
#
me
aware
m
contest
hav
oo
or
i
fi
mre
#

【樣例輸出】

me is correct
aware: award
m: i my me
contest is correct
hav: has have
oo: too
or:
i is correct
fi: i
mre: more me

 

#include<iostream>
using namespace std;
int main(){
    string z[100],a;
    int n=0,i,j,k,k1,t;
    while(cin>>z[n]){
        if(z[n]=="#") break;
        n++;
    }
    while(cin>>a){
        if(a=="#") break;
        for(i=0;i<n;i++){
            if(z[i]==a){
                cout<<a<<" is correct\n";
                break;
            }
        }
        if(i==n){
             cout<<a<<":";
            for(j=0;j<n;j++){
                t=0;
                 if(a.size()==z[j].size()){
                    for(k=0;k<a.size();k++){
                        if(a[k]!=z[j][k]&&t==0) t=1;
                        else if(a[k]!=z[j][k]&&t==1) break;
                    }
                    if(k==a.size()){
                        cout<<' '<<z[j];
                    }
                }
                else if(a.size()+1==z[j].size()){
                    k1=0;
                    for(k=0;k<z[j].size();k++){
                        if(a[k1]!=z[j][k]&&t==0){
                            k1--;
                            t=1;
                        }
                        else if(a[k1]!=z[j][k]&&t==1){
                            break;
                        }
                        k1++;
                    }
                    if(k==z[j].size()){
                        cout<<' '<<z[j];
                    }
                }
                else if(a.size()==z[j].size()+1){
                    k1=0;
                    for(k=0;k<a.size();k++){
                        if(a[k]!=z[j][k1]&&t==0){
                            k1--;
                            t=1;
                        }
                        else if(a[k]!=z[j][k1]&&t==1){
                            break;
                        }
                        k1++;
                    }
                    if(k==a.size()){
                        cout<<' '<<z[j];
                    }
                }
            }
            cout<<endl;
        }
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章