在c ++中如何从字母

时间:2015-10-07 05:28:00

标签: c++ string contains string-length

这是我的家庭作业,我们的教授希望我们先使用cin来获得一个字符串,并输出" a"和" c"在那个字符串中。

我的想法是首先删除所有其他字母,例如,如果你有一个sting str =" apple",你想要" p" s,你删除其他字母,得到一个新的sting,它是str1 =" pp",而不是使用str.size()来得到多少“p”。

我的问题是如何删除其他字母。

7 个答案:

答案 0 :(得分:4)

如果您只计算一个特定的字母,则会有一个标准的库算法。

int p_count = std::count(str.begin(), str.end(), 'p');

有一种相关的算法可以接受更复杂用途的谓词:

int ac_count = std::count_if(str.begin(), str.end(), [](char ch){ return ch == 'a' || ch == 'c'; });

对于另一个解决方案,一个简单的数组。这很快,并且一次性计算所有字母。

int counts[256] = {};
for (unsigned char ch : str) {
    ++counts[ch];
}
cout << "a count is " << counts['a'] << '\n';
cout << "c count is " << counts['c'] << '\n';

答案 1 :(得分:2)

如果您被允许使用std::map,则可以使用:

std:map<char, int> charCount;
for (auto c : str )
{
   charCount[c]++;
}

// Number of times 'a' is found:
int aCount = charCount['a'];

// Number of times 'c' is found:
int cCount = charCount['c'];

答案 2 :(得分:1)

为什么要删除字符?你可以实现这样的目标:

std::string str;
std::cin >> str;
int a_counter = 0;
for(char& c : str) 
{
   if (c == 'a')
    a_counter++; 
}

std:: cout << a_counter;

答案 3 :(得分:1)

C ++标准库具有以下功能:count

int a_count = std::count(str.begin(), str.end(), 'a');

答案 4 :(得分:0)

其他大多数答案都很棒,我强烈建议您使用Blastfurnace's solution;但是,如果您真的想要删除std::string中的字符除了某些字符集(例如'a'和'c'),您可以使用erase-remove idiom

std::string s;
std::cin >> s;
s.erase(std::remove_if(s.begin(), s.end(), [](char c){ return c != 'a' || c != 'c'; }), s.end());
cout << s.size() << endl;

answer here进一步解释(免责声明:这是我的回答)

答案 5 :(得分:0)

您可以使用以下思维过程来解决将来的类似问题。

编程可简化为执行3个步骤:

1)输入数据 2)过程数据 3)输出数据

步骤:

1)了解您在输入时尝试解决的问题。

你知道你必须使用“cin”读取输入并使用字符串变量存储它,然后计算字符在字符串中出现的次数。

2)详细了解用于存储输入的变量类型/类。

在您的情况下,您将输入存储在“字符串”中,该字符串是字符串类/类型。转到C ++参考网站,阅读有关字符串类的知识,并熟悉字符串类提供的所有函数和属性。请参阅以下link:在那里您将看到,该字符串类具有返回字符的“[]”运算符。您可以单击该链接并查看有关如何使用它的示例。

接下来,使用刚刚获得的信息处理数据。

3)现在实现你的逻辑来处理数据。

在您的情况下,您可以运行for循环:

std::string str;

std::cin << std::str;

int counter = 0;

for(int i=0; i< str.size();i++)

{

      if( str[i] == 'p' ) counter++;

}

if块检查字符串中的每个字符并将其与“p”字符匹配。如果匹配,则计数器变量增加1.最后,“counter”的值是“p”出现在字符串“str”中的次数

答案 6 :(得分:0)

struct OrderedDictionary<Tk: Hashable, Tv> {
    /* ... vars and init ... */

    subscript(key: Tk) -> Tv? {
        get {
            return self.values[key]
        }
        set(newValue) {
            if newValue == nil {
                self.values.removeValueForKey(key)
                self.keys.filter {$0 != key}
                return
            }

            let oldValue = self.values.updateValue(newValue!, forKey: key)
            if oldValue == nil {
                self.keys.append(key)
            }
        }
    }
}