Description
Input
Output
Sample Input
i is has have be my more contest me too if award # me aware m contest hav oo or i fi mre #
Sample Output
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
思路:
这道题有点小简单,就是简单的进行字符串的比较
首先要判断是否存在,存在的话都直接完事!
后面分三种情况就OK了!
1. 就是长度相等的时候;
2. 就是长度-1的情况;
3. 就是长度+1的情况。
#include <iostream> #include <vector> #include <string> #include <iterator> #include <algorithm> using namespace std; vector<string> vecStrDir; vector<string> findByLength(int len) { vector<string> vec; for (vector<string>::iterator it = vecStrDir.begin(); it != vecStrDir.end(); ++it) { if (it->length() == len) { vec.insert(vec.end(), *it); } } return vec; } bool compareOneDiff(string str1, string str2) { int flag = 0; for (int i = 0; i < str1.length(); ++i) { if (str1[i] != str2[i]) { ++flag; } } if (flag <= 1) { return true; } return false; } bool compareOneLess(string str1, string str2) { int flag = 0; for (int i = 0; i < str1.length() + 1; ++i) { string s0(str2, 0, i); string s1(str2, i, 1); string s2(str2, i + 1, str2.length() - i -1); string s3 = s0 + s2; if (!s3.compare(str1)) { return true; } } return false; } int main() { //1. 输入字典 string sWord; while (cin >> sWord, sWord.compare("#")) { vecStrDir.insert(vecStrDir.end(), sWord); } //2. 输出处理数据 while (cin >> sWord, sWord.compare("#")) { vector<string>::iterator it; it = find(vecStrDir.begin(), vecStrDir.end(), sWord); if (it != vecStrDir.end()) { cout << *it << " is correct"; } else { cout << sWord << ":"; //判断长度相等的时候,即修改一个字母的情况 int ilen = sWord.length(); vector<string> vecStrHelp; vecStrHelp = findByLength(ilen); for (vector<string>::iterator it = vecStrHelp.begin(); it != vecStrHelp.end(); ++it) { string str = *it; if (compareOneDiff(sWord, str)) { cout << " " << *it; } } //判断长度+1的情况,即插入一个字母的情况 vecStrHelp.clear(); vecStrHelp = findByLength(ilen + 1); for (vector<string>::iterator it = vecStrHelp.begin(); it != vecStrHelp.end(); ++it) { string str = *it; if (compareOneLess(sWord, str)) { cout << " " << *it; } } //判断长度-1的情况,即删除一个字母的情况 vecStrHelp.clear(); vecStrHelp = findByLength(ilen - 1); for (vector<string>::iterator it = vecStrHelp.begin(); it != vecStrHelp.end(); ++it) { string str = *it; if (compareOneLess(str, sWord)) { cout << " " << *it; } } } cout << endl; } return 1; }