您的位置:首页 > 其它

计算字符个数——来自华为OJ平台测试基础篇

2014-10-03 17:14 537 查看

/*

* 计算字符个数

* 描述: 写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。

* 知识点: 字符串,函数,指针

* 题目来源: 内部整理

* 练习阶段: 初级

* 运行时间限制: 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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: