要求统计字符串中相同字符的个数,大写字母算小写字母来统计。例如: 输入字符串 bbBCcaA* ,输出*:1 a:2 b:3 c:2
asp.net中
代码如下 |
复制代码 |
#include
using namespace std;
const int MAX_NUMBER=200;
//统计相同字符个数
void Calc(const char *str,int len);
int main()
{
char pch[MAX_NUMBER];
//输入字符串
cin.getline(pch,MAX_NUMBER);
int length=strlen(pch);
Calc(pch,length);
return 0;
}
void Calc(const char *str,int len)
{
int LetterCounts[256]; //这个数组是关键,它存放着所以西文字符的个数
int i;
for( i = 0 ; i < 256 ; i++)
LetterCounts[i]=0;
for( i = 0 ; i < len ; i++)
{
if ( str[i] >= 'A' && str[i] <= 'Z')
LetterCounts[str[i]+32]++; //大写做小写处理
else
LetterCounts[str[i]]++;
}
for ( i=0 ; i < 256 ; i++)
{
if (LetterCounts[i] > 0)
cout<<(char)i<<":"<
}
}
|
php中
代码如下 |
复制代码 |
//这个方法纯粹是背函数,不解释;
function countStr($str){
$str_array=str_split($str);
$str_array=array_count_values($str_array);
arsort($str_array);
return $str_array;
}
//以下是例子;
$str="asdfgfdas323344##$$fdsdfg*$**$*$**$$443563536254fas";
print_r(countStr($str));
?>
//这个方法有些数据结构的思想,不过还是很好理解的:)
function countStr2($str){
$str_array=str_split($str);
$result_array=array();
foreach($str_array as $value){//判断该字符是否是新出现的种类,是的话就设置为1,不是的话就自加;
if(!$result_array[$value]){
$result_array[$value]=1;
}else{
$result_array[$value]++;
}
}
arsort($result_array);
return $result_array;
}
//以下是例子;
$str="asdfgfdas323344##$$fdsdfg*$**$*$**$$443563536254fas";
var_dump(countStr2($str))
?>
//这个方法纯粹是解法一的蹩脚版本,先找出所有字符的总类,然后在一个一个用substr_count函数统计。
function countStr3($str){
$str_array=str_split($str);
$unique=array_unique($str_array);
foreach ($unique as $v){
$result_array[$v]=substr_count($str,$v);
}
arsort($result_array);
return $result_array;
}
//以下是例子;
$str="asdfgfdas323344##$$fdsdfg*$**$*$**$$443563536254fas";
var_dump(countStr3($str));
?>
|