这是我的家庭作业,我们的教授希望我们先使用cin来获得一个字符串,并输出" a"和" c"在那个字符串中。
我的想法是首先删除所有其他字母,例如,如果你有一个sting str =" apple",你想要" p" s,你删除其他字母,得到一个新的sting,它是str1 =" pp",而不是使用str.size()来得到多少“p”。
我的问题是如何删除其他字母。
答案 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)
}
}
}
}