这是我家的工作,我们的教授希望我们将CIN先得到一个字符串,并输出在字符串“a”和“c”的数量。例如,如果你有一个sting str =“apple”,并且你想要“p”,你删除了其他的字母,并且得到一个新的sting,这个str1 = str1 = “pp”,比使用str.size(),以获得多少“p”。在C++中如何获得一个字母组成的字符串
我的问题是我怎么能删除其他字母。
这是我家的工作,我们的教授希望我们将CIN先得到一个字符串,并输出在字符串“a”和“c”的数量。例如,如果你有一个sting str =“apple”,并且你想要“p”,你删除了其他的字母,并且得到一个新的sting,这个str1 = str1 = “pp”,比使用str.size(),以获得多少“p”。在C++中如何获得一个字母组成的字符串
我的问题是我怎么能删除其他字母。
为什么甚至删除人物?你可以实现你的目标是这样的:
std::string str;
std::cin >> str;
int a_counter = 0;
for(char& c : str)
{
if (c == 'a')
a_counter++;
}
std:: cout << a_counter;
如果你被允许使用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'];
我不认为我们能够使用std :: map –
如果你只计算一个特定的字母有一个标准库算法。
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';
“使用cin首先获取字符串,并输出该字符串中的多少”a“和”c“...” – juanchopanza
@juanchopanza:添加了'std :: count_if'示例。说实话,对于这个作业,我可能会创建'int counts [256];'并遍历字符串,一次更新计数。 – Blastfurnace
同意。阵列可能是最好的解决方案。 – juanchopanza
C++标准库中有这样的功能:count:
int a_count = std::count(str.begin(), str.end(), 'a');
其他大部分答案都是伟大的,我强烈建议您使用Blastfurnace's solution;但是,如果你真的想擦除从std::string
的chracters除了一组特定的字符(比如“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进一步解释(免责声明:这是我的回答)
非常感谢你! –
您可以在将来解决类似问题时使用以下思维过程。
编程可以简化为执行3个步骤:
1)输入数据 2)的过程数据 3)的输出数据
步骤:
1)了解你正在试图解决什么在你的意见。
您知道您必须使用“cin”读取输入并使用字符串变量进行存储,然后计算该字符串中字符出现的次数。
2)详细了解用于存储输入的变量类型/类。
在您的情况下,您将输入存储在字符串类/类型的“字符串”中。转到C++参考网站,阅读有关字符串类的知识,并熟悉字符串类提供的所有功能和属性。请参阅以下link:在那里您会看到,该字符串类具有返回字符的“[]”运算符。您可以点击该链接并查看如何使用它的示例。
接下来,使用您刚刚获得的信息处理您的数据。
3)现在执行你的逻辑来处理数据。
在你的情况,你可以循环运行:
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。最后,“计数器”的值是字符串“str”中出现“p”的次数
for(int i=0;i<str.size();i++)
{
if(str[i]=='a')
countOfa++;
else if(str[i]=='c')
countOfc++;
}
cout<<"coun of A is :"<<countOfa<<endl;
cout<<"coun of C is :"<<countOfc<<endl;
return 0;
}
很好很清楚,谢谢你! –
欢迎您也初始化countOfa和countOfc为0 – Danika
这里是您可以操作的列表在一个'std :: string'上执行:http://www.cplusplus.com/reference/string/string/这应该有助于你的任务。请注意,该列表还强调了您可以替代的其他功能 – Tas
不删除其他字符会更快。创建一个计数器变量,将其初始化为'0',然后遍历字符串并在每次当前字符为'a'或'c'时添加到计数器变量中 – asimes