检查猜测的字符串在错误的位置是否有正确的字符

问题描述 投票:-1回答:1

我想生成一个包含字母a,b,c,d的随机字符串,然后让用户猜测它。我的输出应该是用户正确猜出的位置以及用户正确猜出了多少个字母,但将它们放在错误的位置。

当前尝试:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>

using namespace std;

int main()
{
    char lettres[4] =
    {
        'a',
        'b',
        'c',
        'd'
    };
    char rString[4];
    int i = 0;

    srand(time(0));

    while (i < 4) 
    {
        int temp = rand() % 4;
        rString[i] = lettres[temp];
        i++;
    }

    int u = 0;
    char t[4];

    while (u < 10)
    {
        cout << "Enter your guess:\n ";
        cin >> t;

        for (int z = 0; z < 4; z++)
        {
             cout << rString[z] << ", "; //printing random string
        }
        cout << "\n";

        int k;
        int compteur = 0;
        int t2[4];
        int compteur2 = 0;

        for (k = 0; k < 4; k++)
        {
            if (rString[k] == t[k]) //rString is my random string
            {
                t2[compteur2] = k;
                compteur2++;
            }
        }

        for (int y = 0; y < 4; y++)
            for (int j = 0; j < 4; j++) 
            {
                if (t[y] == rString[j] && y != j) //checking correct letters at wrong positions
                { 
                    compteur++;
                    t[y] = 'z'; //I put this line to avoid counting a letter twice
                }
            }

        if (compteur2 == 4) 
        {
            cout << "bravo\n";
            u = 10;
        } else
        {
            cout << "Positions with correct letters:\n ";
            if (compteur2 == 0)
            {
                cout << "None";
                cout << " ";
            } else
                for (int z = 0; z < compteur2; z++) 
                    c out << t2[z] << ", ";

            cout << " \n";
            cout << "You have a total of " << compteur << " correct letters in wrong positions\n";

        }
        u++;
    }
    return 1;
}

样本输出:

Enter your guess:
 abcd
b, a, b, a,  //note this is my random string I made it print
Positions with correct letters:
 None  
You have a total of 1 correct letters in wrong positions

例如,我在错误的位置有2个正确的字母,输出为1

要澄清为什么我将t[y]='z';放在例如随机字符串为“ accd”而我的输入为“ cxyz”的情况下,我会得到我在错误位置上有2个正确的字母,所以我这样做是为了解决问题它。

有关如何执行此操作的任何帮助?

c++
1个回答
0
投票

您应该像这样实现

#include <iostream>

#include <cstdlib>

#include <ctime>

#include <string>

using namespace std;

int main ()
{
  char lettres[4] = {
    'a',
    'b',
    'c',
    'd'
  };
  char rString[4];

  int i = 0;

  srand (time (0));

  while (i < 4)
    {
      int temp = rand () % 4;
      rString[i] = lettres[temp];
      i++;
    }

  int u = 0;
  char t[4];

  while (u < 10)
    {
      cout << "Enter your guess:\n ";
      cin >> t;

      //printing random string
      for (int z = 0; z < 4; z++)
    {
      cout << rString[z] << ", ";
    }
      cout << "\n";

      int correctPositions = 0;
      cout << "Correct Position Are:\n";
      for (int z = 0; z < 4; z++)
    {
      if (rString[z] == t[z])
        {
          cout << (z + 1) << ", ";
          correctPositions++;
        }
    }
      if (correctPositions == 4)
    {
      cout << "\nBingo!" << "\nThat's Right!";
      return 0;
    }
      if (correctPositions == 0)
    {
      cout << "None";
    }
      cout << "\n";

      //finding no of correct letters:
      int correctLetters = 0;

      for (int i = 0; i < 4; i++)
    {
      char c = lettres[i];
      int randomCount = 0;
      int guessCount = 0;
      int letterInCorrectPos = 0;
      for (int z = 0; z < 4; z++)
        {


          if (rString[z] == c)
        {
          randomCount++;
        }
          if (t[z] == c)
        {
          guessCount++;
        }
          if (rString[z] == t[z] && t[z] == c)
        letterInCorrectPos++;


        }

      correctLetters +=
        min (guessCount, randomCount) - letterInCorrectPos;

    }
      cout << "No. of correct letters but in wrong position :" <<
    correctLetters;

      cout << "\n\n";
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.