基于另一个字符串创建一个由空格 (_) 和空格组成的字符串
Create a string composed of blanks (_) and spaces based on another string
我非常接近完成一项任务,在那里我被指示创建一个命运之轮游戏。
我需要做的最后一件事是,让游戏板为尚未猜到的字母打印正确数量的空格和破折号。
用户在游戏开始时输入一个字符串,假设它是"Hello World"
我希望这个函数创建一个新的string
,这将是"----- -----"
。
所拥有的会起作用,但是当我尝试编译时,我得到了从const char*
到char
的无效转换。
这是我所拥有的:secret
是用户作为游戏输入给出的string
,guess
是玩家猜测的字母,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
创建的函数,例如 "----- -----"
分别使用 hidden
和 secret
的"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
给出string
的char
,因此应该使用与' '
进行比较,这是一个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.
}
}
}
这里有几个输入:
-
hidden.at(q( == "-" .这实际上是比较而不是赋值,然后"用于字符串而不是字符。可能是,将代码修改为:hidden.at(q( = '-'
-
std::string.at(x( 给你const_char,你正在给它分配非常量值('-'(。需要型铸件 ( (
-
尝试使用 std::string::npos 限制字符串的循环
希望这些有帮助。
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 移除前面有空格的前2个字符串
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 在字符串中插入空格
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 使用另一个字符串从字符串中删除空格
- 我还可以添加什么来按空格或空格正确拆分C++字符串?
- C++ "noskipws"没有按预期工作,如何正确允许字符串中的空格?
- 在 c++ 中逐行阅读字符串,不要以空格停止
- std::regex:匹配由数字和空格组成的字符串,并提取数字.如何?
- 如何存储包含多个空格的字符串 c++
- 在特定位置为字符串添加空格
- 有没有办法在 c++ 中获取带有空格的完整字符串?
- C++完全复制要字符串的字符列表,而不会忽略多个空格
- Winsock2:当我尝试发送带有空格的字符串时,该函数在遇到空格时似乎停止发送
- 从没有空格的字符串中提取整数
- 用于拆分空格字符串的程序不起作用
- 解析C++中的完整(从头到尾)字符串,包括所有空格
- 反转字符串中单词的位置,而不更改 O(1) 空格限制中特殊字符的顺序
- 如何获取我的区域设置的空格字符串?