计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。
输入:abcd
输出:4
例如2:
输入:abcdee
输出:5
方法一:set(注意包含字母大小写);测试不通过,时间太长
#include <stdlib.h>
#include "oj.h"
#include<set>
using namespace std;
/*
功能:
输入:字符串
输出:无
返回:字符个数
*/
int GetCount( char* strInValue )
{
if (NULL== strInValue) {
return -1;
}
int num[128];
set<char> s;
while (*strInValue!='\0') {
if (*strInValue>=0&& *strInValue<=127) {
s.insert(*strInValue);
}
}
return s.size();
}方法二:
#include <stdlib.h>
#include "oj.h"
#include <string.h>
/*
功能:
输入:字符串
输出:无
返回:字符个数
*/
int GetCount( char* strInValue )
{
if (NULL== strInValue) {
return -1;
}
int char_num = 0;
int i = 0;
char *temp = strInValue;
char *rpt;
while (*temp!='\0')
{
if (*temp >= 0 && *temp <= 127)
{
rpt = (char*)memchr(strInValue, *temp, (i + 1));
if ((rpt - strInValue) == i) char_num++;
}
temp++;
i++;
}
return char_num;
}
本文介绍两种方法来计算字符串中ASCII范围内不同字符的数量。第一种使用C++标准库中的set来统计,第二种则采用memchr函数逐字符比较。两种方法各有优劣,set方法简洁但可能因查找操作导致较慢;memchr方法虽更复杂,但在某些情况下可能提供更好的性能。

3499

被折叠的 条评论
为什么被折叠?



