Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将字符串中的一个字母更改为新词c++;_C++_Stl - Fatal编程技术网

C++ 将字符串中的一个字母更改为新词c++;

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

在字典中查找与任何给定的四个字母输入仅相差一个字母的单词集。 例如,单词“desk”可以将第二个字母替换为“i”,并获得“disk”

这就是我目前所拥有的。我被困在如何开始这个过程中,任何帮助都是非常感谢的

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中命名的,我会显示该版本:)