仅当数组中尚未包含值时,才向数组添加值

Add value to array only if value isn't already in array

本文关键字:数组 添加 包含值      更新时间:2023-10-16

到目前为止,我的代码只防止两个以上的重复,但由于某种原因,它确实允许两个值相同。

if (found != string::npos && binarySearch(wrongLetters, used, guessLetter) == -1)
    {
        wrongLetters[turnNumber] = toupper(guessLetter);
        for (int i = 0; i < guessWord.length(); i++)
        {
            if (guessWord[i] == guessLetter)
                maskedWord[i] = guessLetter;
        }
    }
    else if (found != string::npos && binarySearch(wrongLetters, used, toupper(guessLetter)) != -1)
        cout << "That letter has already been usednn";
    else if (found == string::npos && binarySearch(wrongLetters, used, toupper(guessLetter)) != -1)
        cout << "That letter has already been usednn";
    else if (found == string::npos && binarySearch(wrongLetters, used, guessLetter) == -1)
    {
        wrongLetters[turnNumber] = toupper(guessLetter);
        cout << guessLetter << " is NOT in the word to guessnn";
        incorrectCount++;
    }

如果您使用的是命名空间 std,我建议如下:

bool check = find(begin(array), end(array), x) != end(array);

如果未找到 x,find 将返回 1 的位置超过它检查的最后一个位置。

if(!check)
   *add the element*

如果它是动态的,我建议使用向量。

使用正确的工具来完成工作,在这种情况下(如@tobi303指出的那样(,一个本质上可以防止容器内存在同一项目的多个实例的std::set

在您的情况下,您可以了解插入是否成功,如果插入不成功,则打印通知:

if(!letters.insert(letter).second) std::cout << "That letter has already been usedn";

其中lettersstd::set<char>(假设它是您问题中的char容器,并不完全清楚(,letter是您尝试插入的charstd::set::insert返回一个std::pair,其第二个值是指示插入是否成功的bool