我正在尝试编写一个文字游戏,在文字游戏中,我需要能够知道我可以使用哪些字母。我有一个可用字母的字符串,在开头,将是“abcdefghijklmnopqrstuvwxyzaeiou”,整个字母表带有一组额外的元音。我需要能够在字符串中搜索某个字符(我可能想使用字母'c'),然后假设字符在字符串中,从字符串中删除该字符。我不完全确定如何做到这一点,但我正在写一些伪代码。
string alphabet = "abcdefghijklmnopqrstuvwxyzaeiou"
char input;
cout << "Please input a character.";
cin >> input;
if (input is in the string)
{
remove the letter from the string
}
else
{
cout << "That letter is not available to you."
}
我想我可以使用string :: find来查找我的角色,但我不知道我怎么能从字符串中删除这个字母。如果有更好的方法,请告诉我。
答案 0 :(得分:1)
如何在字符串中搜索字符,并删除所述字符
只需使用std::remove
和erase-remove idiom:
#include <string>
#include <algorithm>
#include <iterator>
....
std::string s = .....; // your string
char c = ....; // char to be removed
s.erase(std::remove(std::begin(s), std::end(s), c), std::end(s));
这是一个C ++ 03版本,以防您遇到C ++ 11之前的编译器:
#include <string>
#include <algorithm>
....
std::string s = .....; // your string
char c = ....; // char to be removed
s.erase(std::remove(s.begin(), s.end(), c), s.end());
答案 1 :(得分:1)
代替你,我会采用不同的方法:
std::map<char, size_t> alphabet = init_alphabet("abc....");
使用:
#include <map>
std::map<char, int> init_alphabet(std::string const& pool) {
std::map<char, int> result;
for (char c: pool) { result[c] += 1; }
return result;
}
然后,不要像疯了一样乱洗人物,而只是检查角色是否在地图中:
if (alphabet[input] > 0) {
alphabet[input] -= 1;
} else {
std::cerr << "The letter '" << input << "' is not available to you.\n";
}
这样,map
为你做了所有繁重的工作。