统计字符串中重复出现字符数再排名

作者:袖梨 2022-06-25

要求统计字符串中相同字符的个数,大写字母算小写字母来统计。例如: 输入字符串 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)); 
?> 

相关文章

精彩推荐