2015-10-07 39 views
0

这是我家的工作,我们的教授希望我们将CIN先得到一个字符串,并输出在字符串“a”和“c”的数量。例如,如果你有一个sting str =“apple”,并且你想要“p”,你删除了其他的字母,并且得到一个新的sting,这个str1 = str1 = “pp”,比使用str.size(),以获得多少“p”。在C++中如何获得一个字母组成的字符串

我的问题是我怎么能删除其他字母。

+1

这里是您可以操作的列表在一个'std :: string'上执行:http://www.cplusplus.com/reference/string/string/这应该有助于你的任务。请注意,该列表还强调了您可以替代的其他功能 – Tas

+0

不删除其他字符会更快。创建一个计数器变量,将其初始化为'0',然后遍历字符串并在每次当前字符为'a'或'c'时添加到计数器变量中 – asimes

回答

1

为什么甚至删除人物?你可以实现你的目标是这样的:

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

std:: cout << a_counter; 
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']; 
+0

我不认为我们能够使用std :: map –

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'; 
+0

“使用cin首先获取字符串,并输出该字符串中的多少”a“和”c“...” – juanchopanza

+0

@juanchopanza:添加了'std :: count_if'示例。说实话,对于这个作业,我可能会创建'int counts [256];'并遍历字符串,一次更新计数。 – Blastfurnace

+0

同意。阵列可能是最好的解决方案。 – juanchopanza

1

C++标准库中有这样的功能:count

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

其他大部分答案都是伟大的,我强烈建议您使用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进一步解释(免责声明:这是我的回答)

+0

非常感谢你! –

0

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

编程可以简化为执行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”的次数

0
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; 
} 
+0

很好很清楚,谢谢你! –

+0

欢迎您也初始化countOfa和countOfc为0 – Danika

相关问题