如何在字符串中搜索字符,并删除所述字符

时间:2014-04-21 12:48:20

标签: c++ c++11

我正在尝试编写一个文字游戏,在文字游戏中,我需要能够知道我可以使用哪些字母。我有一个可用字母的字符串,在开头,将是“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来查找我的角色,但我不知道我怎么能从字符串中删除这个字母。如果有更好的方法,请告诉我。

2 个答案:

答案 0 :(得分:1)

  

如何在字符串中搜索字符,并删除所述字符

只需使用std::removeerase-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为你做了所有繁重的工作。