基于另一个字符串创建一个由空格 (_) 和空格组成的字符串

Create a string composed of blanks (_) and spaces based on another string

本文关键字:空格 字符串 另一个 一个 创建      更新时间:2023-10-16

我非常接近完成一项任务,在那里我被指示创建一个命运之轮游戏。

我需要做的最后一件事是,让游戏板为尚未猜到的字母打印正确数量的空格破折号

用户在游戏开始时输入一个字符串,假设它是"Hello World"

我希望这个函数创建一个新的string,这将是"----- -----"

我想,我

所拥有的会起作用,但是当我尝试编译时,我得到了从const char*char的无效转换。

这是我所拥有的:secret是用户作为游戏输入给出的stringguess是玩家猜测的字母,hidden是我尝试创建的带有破折号和空格的新字符串。

void show_board(string &guess, string &secret, string &hidden)
{
   for(int q=0; q < secret.length ; q++)
   {
      if(secret.at(q) == " ")
      {
         hidden.at(q) == " ";
      }
      else
      {
         hidden.at(q) == "-";
      }
   }
}

我刚刚意识到,if部分确实是多余的,但我的问题仍然存在。

因此,对于我现在拥有的for循环:

for(int q=0 ; q < secret.length() ; q++)
{
   if(secret[q]==' ')
   {
      hidden += " ";
   }
   else if(guess == secret[q])
   {
      hidden += guess;
   }
   else
   {
      hidden += "-";
   }
}

而且,我在与guess的行上收到一个错误,上面写着:

错误 'guess == ((std::string*(secret(->std::basic_string<_CharT, _Traits, _Alloc>::

operator[] [其中 _CharT = char, _traits = std::char_traits, _Alloc = std::allocator](((long unsigned int(q(('

尝试将双引号切换为单引号。 双引号用于字符串文本,但在本例中,您正在与字符进行比较。

您的问题没有指定应如何使用guess,因此,我已经更正了show_board创建的函数,例如 "----- -----"分别使用 hiddensecret"hello world"

这是代码:

void show_board(string &guess, string &secret, string &hidden)
{
   hidden = "";
   for(int q=0; q < secret.length ; q++)
   {
      if(secret[q] == ' ')
      {
         hidden += " ";
      }
      else if(secret[q] == guess[0]) // assuming guess.length == 1
      {
         hidden += guess;
      }
      else
      {
         hidden += "-";
      }
   }
}

在这里,+=运算符与string数据类型一起使用时,提供了串联功能。

此外,[index]运算符在给定index给出stringchar,因此应该使用与' '进行比较,这是一个char,而不是" "

注意:在这里,尚未保留已猜测多少字符的跟踪。

编辑:

为了解决上面注释中的问题,我建议您创建一个单独的initialize_hidden函数来生成hidden字符串,然后将该hidden字符串用于所有后续猜测,使用 show_board 函数如下:

void initialize_hidden(string &secret, string &hidden) // to do something like generating "----- -----" from "hello world" for the first time.
{
   hidden = "";
   for(int q=0; q < secret.length ; q++)
   {
      if(secret[q] == ' ')
      {
         hidden += " ";
      }
      else
      {
         hidden += "-";
      }
   }
}
void show_board(string &guess, string &secret, string &hidden) // assumming that: hidden == "----- -----" has been initialized using initialize_hidden before and it could also be: hidden == "-e--o -o---" for wubsequent guesses
{
   for(int q=0; q < secret.length; q++)
   {
      if(secret[q] == guess[0]) // assuming guess.length == 1
      {
         hidden[q] = guess[0]; // just replace the newly guessed character, because rest(' 's and '-'s) would already be present since, initialize_hidden has been already called once.
      }
   }
}

这里有几个输入:

  1. hidden.at(q( == "-" .这实际上是比较而不是赋值,然后"用于字符串而不是字符。可能是,将代码修改为:hidden.at(q( = '-'

  2. std::string.at(x( 给你const_char,你正在给它分配非常量值('-'(。需要型铸件 ( (

  3. 尝试使用 std::string::npos 限制字符串的循环

希望这些有帮助。