如何将基本字符串中的字符复制到向量字符串中?
Posted
技术标签:
【中文标题】如何将基本字符串中的字符复制到向量字符串中?【英文标题】:How to copy a character from basic string into a vector string? 【发布时间】:2022-01-05 09:38:46 【问题描述】://定义类
class Hangman
private:
vector<string> dictionary; //stores all the words
vector<string> secretWord; //stores the secret word
vector<string> misses; //keeps record of wrong guesses
vector<string> displayVector; //Stores "_"
string originalWord; //stores a copy of secret word to display at the
end of game.
bool gameOver = false; //Flag to check if the player lost or
still in the game.
int totalAttempts;
public:
void selectRandWord();
;
//这是我遇到问题的函数。
void Hangman::selectRandWord()
secretWord.clear();
//word 是存储随机单词的基本字符串。让我们说“Hello World”。
string word;
srand(time(NULL));
int random = (rand() % dictionary.size()) + 1;
//我从一个向量到另一个词存储一个随机词。
word = dictionary[random];
transform(word.begin(), word.end(), word.begin(), ::tolower);
originalWord = word;
for (int index = 0; index < word.length(); index++)
//这行有错误:[Error] invalid user-defined conversion from 'char' to 'std::vectorstd::basic_string
//我要做的是从单词中取出每个字符(例如:“H”)并将其推回向量字符串secretWord中。
secretWord.push_back(word[index]);
【问题讨论】:
为什么secretWord
首先是vector<string>
?不应该是string
吗?
我没有在这里发布我的完整程序,但基本上,我希望能够使用向量库函数,如 pop、pushback、erase 等。
【参考方案1】:
您的secretWord
现在是vector<string>
类型,因此它可能是许多单词的集合,我不确定从名称来看您是否真的打算拥有这些单词。如果确实没问题,并且您想将word
中的每个字符作为单独的string
存储在secretWord
中,那么您需要将push_back
调用替换为emplace_back
调用,因为另一种方法实际上做了两件事一次:从传递给它的char
构造一个string
,并将string
附加到容器的末尾,就像这样
secretWord.emplace_back(1, word[index]);
仅仅push_back
失败,因为它需要提供您的vector
存储类型的对象,因此您也可以通过从char
显式构造string
来解决您的问题:
secretWord.push_back(string(1, word[index]));
如果您对复制/移动详细信息感兴趣,我建议您阅读以下内容:emplace back reference 和 push back reference。
【讨论】:
当我使用 emplace_back 并尝试编译程序时,它会打开一些名为“allocator.h”的文件。在这个文件中,它给出了错误。基本上它说:[错误]从'char'到'const char *'的无效转换[-fpermissive]。在文件 allocator.h 中显示此错误的代码是: ::new((void *)__p) _Up(std::forward<_args>(__args)...); 我添加了显示错误的程序屏幕截图。 @muhammadmuzaib 我的错,我实际上不知道你不能在 C++ 中从单个char
构造一个 string
而不指定你希望 char
重复的次数(已复制)在string
中(参见#2 下的docs)。因此,请按照以下方式进行操作:secretWord.emplace_back(1, word[index]);
同样,C++ 引用对您有很大的帮助,例如,您可以发现另一种解决方案是将 char
转换为指向 char
的指针(匹配basic_string
构造函数版本#5)
@muhammadmuzaib 至于char*
版本,请记住,被视为char*
指向的连续字节的字符串需要以空值结尾,因此其他版本的构造可能很棘手并且需要显式空值终止。但是,还有很多其他选项可以将 char
转换为 string
列出的 here。
谢谢。它奏效了。以上是关于如何将基本字符串中的字符复制到向量字符串中?的主要内容,如果未能解决你的问题,请参考以下文章