/*
* 计算字符个数
* 描述: 写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
* 知识点: 字符串,函数,指针
* 题目来源: 内部整理
* 练习阶段: 初级
* 运行时间限制: 10Sec
* 内存限制: 128MByte
* 输入:
* 输入一个有字母和数字以及空格组成的字符串,和一个字符。
* 输出:
* 输出输入字符串中含有该字符的个数。
* 样例输入: ABCDEF
* A
* 样例输出: 1
* 完成日期:2014/10/03
*/
#include <iostream>
#include <string>
#include <map>
using namespace std;
void Input(std::string &string01,std::string &string02);
bool Isvalid(std::string string);
void Claculate(std::string string,map<char,int> &charnum);
void Output(std::string string,map<char,int> charnum,int &sum);
int main()
{
std::string string01;
std::string string02;
map<char,int> CharNum;
int sum = 0;
Input(string01,string02);
if(!(string02.size()==1))
{
return -1;
}
bool result01 = Isvalid(string01);
bool result02 = Isvalid(string02);
if(((!result01) || (!result02)))
{
return -1;
}
Claculate(string01,CharNum);
Output(string02,CharNum,sum);
std::cout << sum <<endl;
system("pause");
return 0;
}
void Input(std::string &string01,std::string &string02)
{
getline(std::cin,string01,'\n');
getline(std::cin,string02,'\n');
return;
}
bool Isvalid(std::string string)
{
int size = string.size();
char c;
for(int i=0;i<size;i++)
{
c = string.at(i);
if(!((c>=48 && c<=57) || (c>=41 && c<=90) || (c>=97 && c<=122) || (c==32)))
{
return false;
}
}
return true;
}
void Claculate(std::string string,map<char,int> &charnum)
{
int size = string.size();
char c;
for(int i=0;i<size;i++)
{
c = string.at(i);
++charnum[c];
}
return;
}
void Output(std::string string,map<char,int> charnum,int &sum)
{
map<char,int>::iterator iter;
char c = string.at(0);
if((c==32) || (c>=48 && c<=57))
{
iter = charnum.find(c);
if(iter == charnum.end())
{
sum = sum + 0;
}
else
{
sum = iter->second + sum;
}
}
else if((c>=65 && c<=90)) /* A到Z */
{
iter = charnum.find(c);/* 大写 */
if(iter == charnum.end()) /* 没有找到返回map::end()迭代器 */
{
sum = sum + 0;
}
else
{
sum = iter->second + sum;
}
iter = charnum.find((c+32));/* 小写 */
if(iter == charnum.end())
{
sum = sum + 0;
}
else
{
sum = iter->second + sum;
}
}
if((c>=97 && c<=122)) /* a到z */
{
iter = charnum.find(c);/* 小写 */
if(iter == charnum.end())
{
sum = sum + 0;
}
else
{
sum = iter->second + sum;
}
iter = charnum.find((c-32));/* 大写 */
if(iter == charnum.end())
{
sum = sum + 0;
}
else
{
sum = iter->second + sum;
}
}
return;
}