C++ 将字符串中的一个字母更改为新词c++;
在字典中查找与任何给定的四个字母输入仅相差一个字母的单词集。 例如,单词“desk”可以将第二个字母替换为“i”,并获得“disk” 这就是我目前所拥有的。我被困在如何开始这个过程中,任何帮助都是非常感谢的C++ 将字符串中的一个字母更改为新词c++;,c++,stl,C++,Stl,在字典中查找与任何给定的四个字母输入仅相差一个字母的单词集。 例如,单词“desk”可以将第二个字母替换为“i”,并获得“disk” 这就是我目前所拥有的。我被困在如何开始这个过程中,任何帮助都是非常感谢的 int main (int argc, char ** argv) { string word; int count; // count total # of words after each query ifstream inFile; inFile.op
int main (int argc, char ** argv) {
string word;
int count; // count total # of words after each query
ifstream inFile;
inFile.open(argv[1]);
while (cin) {
cout << "Please input a 4 letter word:";
cin >> word;
if (word.size() == 4) {
transform(word.begin(), word.end(), word.begin(), _tolower);
count++;
cout << word << endl;
cout << "Total " << count << " words." << endl;
} else {
cout << "wrong length!" << endl;
}
}
}
int main(int argc,char**argv){
字符串字;
int count;//计算每次查询后的单词总数
河流充填;
填充打开(argv[1]);
while(cin){
cout>单词;
if(word.size()==4){
转换(word.begin(),word.end(),word.begin(),_-tolower);
计数++;
cout一个很好的算法是。假设您有两个长度相等的字符串word
和test
,您可以计算它们之间成对不同的字符数:
int res = std::inner_product(word.begin(), word.end(),
test.begin(),
0,
std::plus{},
std::not_equal_to{});
如果此结果小于2
,则test
和word
字符串最多有一个字符不同:
if (res < 2)
{
// ... successful match
}
if(res<2)
{
//…成功的比赛
}
您可能应该将其封装在一个包含两个字符串的函数中,并返回一个bool
,这样您就可以对集合中所有要测试的单词调用此函数。您认为您必须做什么?编写一个函数距离(字符串,字符串)
然后使用std::vector
作为字典,查找距离为1的元素,请展示您的尝试。没有大问题。只有小问题聚集在您身上。将工作分解为小问题,并不断分解,直到您知道如何解决所有问题。解决小问题。测试它们确保它们真的解决了。将小的解决方案组合成更大的解决方案,边测试边测试。@JHBonarius所以我想我需要一个计数器,将字典中的每个单词与输入的单词进行比较。然后如果第一个字母匹配,则将计数器增加1,对其余字母如此。我可能会阅读相关的将字典中的单词(如只有4个字母的单词)组合成一组。然后我会循环遍历单词中的每个字母,尝试用字母表中的每个字母替换字母,并查找每个新词(记住跳过原来的单词)看看它是否在布景中。例如,在书桌上,试试伊斯克、贝斯克、塞斯克、伊斯克、费斯克,一直到泽斯克,然后试试达斯克、dbsk、dcsk,艾奇斯教授可能不会认为他自己发现了这一点;)@JHBonarius更好。我无意帮助学生在作业上作弊(如果这确实是OP想要做的)。我只想写一些对未来访问者有用的答案。事实上,如果
是在C++20中命名的,我会显示该版本:)