对每个给定的词,在字典中查是否equal,或者是否可以通过replace、insert、delete构成,若可以,记录。水题。
code:
<span style="font-size:18px;">#include <iostream>
#include <fstream>
using namespace std;
char dict[10001][16];
char word[51][16];
int dictNum = 0;
int wordNum = 0;
int dictLen = 0;
bool replace(char *word, char *dict)
{
int dif = 0;
while (*word)
{
if (*(word++) != *(dict++))
{
dif++;
if (dif > 1)
return false;
}
}
return true;
}
bool insert(char *word,char *dict)
{
int dif = 0;
while (*word)
{
if (*(word) != *(dict))
{
dict++;
dif++;
if (dif > 1)
return false;
}
else
{
word++;
dict++;
}
}
return true;
}
bool del(char *word,char *dict)
{
int dif = 0;
while (*word)
{
if (*(word) != *(dict))
{
word++;
dif++;
if (dif > 1)
return false;
}
else
{
word++;
dict++;
}
}
return true;
}
int main()
{
int i, j;
//ifstream in("input.txt");
//input data
while (cin >> dict[dictNum] && dict[dictNum++][0] != '#')
;
while (cin >> word[wordNum] && word[wordNum++][0] != '#')
;
dictNum--;
wordNum--;
int *dictLen = new int[dictNum];
for (i = 0; i < dictNum; i++)
{
dictLen[i] = strlen(dict[i]);
}
//handle:delete\replace\insert
for (i = 0; i < wordNum; i++)
{
int *loc = new int[dictNum];//the change location
int ploc = 0;//change numbers
bool flag = false;//now the dict does not have the word
int wordLen = strlen(word[i]);
for (j = 0; j < dictNum; j++)
{
if (wordLen == dictLen[j])//replace or equal
{
if (!strcmp(word[i], dict[j]))//equal
{
flag = true;
break;
}
else if (replace(word[i],dict[j]))//replace
{
loc[ploc++] = j;
}
}
else if (wordLen == dictLen[j]-1)//insert
{
if (insert(word[i], dict[j]))
loc[ploc++] = j;
}
else if (wordLen == dictLen[j] + 1)//delete
{
if (del(word[i], dict[j]))
loc[ploc++] = j;
}
}
//output
if (flag)
{
cout << word[i] << " is correct" << endl;
}
else
{
cout << word[i] << ": ";
for (j = 0; j < ploc; j++)
{
cout << dict[loc[j]] << " ";
}
cout << endl;
}
}
//system("pause");
return 0;
}</span>