Talk is cheap, show me the code.
一、问题描述
编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。
输入描述:
输入N个字符,字符在ACSII码范围内。
输出描述:
输出范围在(0~127)字符的个数。
输入例子:
abc
输出例子:
3
二、问题分析
可以直接采用set保存输入的字符,然后输出set.size()即可。也可以设置128为bool数组,记录输入的字符个数。还可以把所有输入字符当做一个字符串读入,然后找字符串中0-127的字符是否存在并计数。
解题方式1:
采用128为bool数组记录读入字符,并遍历数组统计计数。
#include <iostream>
using namespace std;
int main()
{
bool ch[128] = {false};
char c;
while (cin >> c)
{
ch[c] = true;
}
int count = 0;
for (int i = 0; i < 128; i++)
{
if (ch[i])
count++;
}
cout << count << endl;
return 0;
}
解题方式2:
采用set保存输入的字符,输出set的大小即可。
#include <iostream>
#include <set>
#include <iterator>
using namespace std;
int main()
{
set<char> st;
char c;
while (cin >> c)
{
st.insert(c);
}
cout << st.size() << endl;
return 0;
}
解题方式3:
直接把所有字符读入为字符串,然后统计0-127中的字符个数。其实在不知道空格、换行、制表符对应ASCII码是否在0-127之间时最好不要采用这种方法,用这种方法也行,不过就不能是读入一个单词的string,而是把整行读入作为一个字符串。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string b;
getline(cin,b);
int count=0;
for(int i=0;i<=127;i++)
if(b.find(i)!=string::npos)
count++;
cout<<count;
return 0;
}