C语言编程:输入一字符串,统计字符串中各个字符出现的频率?

 我来答
lgao622
2015-09-17 · 知道合伙人软件行家
lgao622
知道合伙人软件行家
采纳数:1137 获赞数:6548
毕业于武汉工程大学邮电与信息工程学院通信专业,软件行业,4年工作经验。

向TA提问 私信TA
展开全部

可以先排序,在遍历统计。

#include <stdio.h>
#include <string.h>
// 升序字符串src,然后返回
char* sort(char *src)
{
    char tem, len = strlen(src);
    for (int i = 0; src[i]; i++)
    {
        for (int j = 0; j < len - i - 1; j++)
            if (src[j] > src[j+1])
            {
                tem = src[j];
                src[j] = src[j+1];
                src[j+1] = tem;
            }
    }
    return src;
}

int main()
{
    char str[1000], ch;
    int i = 0, cnt;
    printf("input a string :");
    gets(str);
    sort(str);  // 排序
    ch = str[0];
    cnt = 1;
    for (i = 1; str[i]; i++) // 遍历统计
    {
        if (str[i] != ch)
        {
            if (cnt)
                printf("%c has %d.\n", ch, cnt);
            ch = str[i];
            cnt = 1;
        }
        else
            cnt++;
    }
    if (cnt)
        printf("%c has %d.\n", ch, cnt);
    return 0;
}

金鱼8884
推荐于2017-10-13 · 知道合伙人数码行家
金鱼8884
知道合伙人数码行家
采纳数:124 获赞数:14949
学生

向TA提问 私信TA
展开全部

  以下是C语言代码:

#include <stdio.h>
#include <ctype.h>

int main(void)
{
 int a[26]={0};
 int i;
 char c;
 while ((c=getchar())!='\n')
  if (isalpha(c)) a[tolower(c)-'a']++;

 for (i = 0; i<26; i++) {
  printf("%c\t:\t%d\n",'a'+i,a[i]);
 }
 return 0;
}

  以下是运行所显示的结果:

  

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
PcrazyC
推荐于2017-10-12 · TA获得超过1466个赞
知道小有建树答主
回答量:911
采纳率:0%
帮助的人:923万
展开全部
//统计一个文件里各个字符出现的次数,转换频率自己再加几句就是了,这里只统计了26个字母,如果还有更多的字符的话,将数组再扩大就行了,应该比较简单,我就不写了
#include<stdio.h>
#include<math.h>

void stat(char *file,int *statistic)
{
int i=0;
while(file[i++]!=0)
statistic[file[i-1]-97]++;
}

int main()
{

char file[100]={0};
int statistic[26]={0};
int i=0,j;
double s=0;
FILE *fp;
if((fp=fopen("1.txt","r"))==NULL)
{
printf("can't open 1.txt");
return 1;
}
while(!feof(fp))
fread(&file[i++],1,1,fp);
fclose(fp);
j=i;
stat(file,statistic);
for(i=0;i<26;i++)
printf("%c:%d\n",97+i,statistic[i]);
return 0;
}

//在源程序目录下建立一个文本文件1.TXT,里面输入字符串,就可以进行统计了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2008-03-06
展开全部
#include <iostream.h>
#include <string.h>
void frequency( string& s, char& A[ ], int& C[ ], int &k )
{
// s是输入字符串,数组A[ ]中记录字符串中有多少种不同的字符,C[ ]中记录每
//一种字符的出现次数。这两个数组都应在调用程序中定义。k返回不同字符数。
int i, j, len = s.length( );
if ( !len )
{
cout << "The string is empty. " << endl;
k = 0;
return;
}
else
{
A[0] = s[0]; C[0] = 1; k = 1; /*语句s[ i ]是串的重载操作*/
for ( i = 1; i < len; i++ ) C[ i ] = 0; /*初始化*/
for ( i = 1; i < len; i++ )
{ /*检测串中所有字符*/
j = 0;
while ( j < k && A[j] != s[ i] ) j++; /*检查s[ i]是否已在A[ ]中*/
if ( j == k )
{
A[k] = s[ i]; C[k]++; k++
} /*s[ i]从未检测过*/
else C[ j]++; /*s[ i]已经检测过*/
}
}
}
/*
测试数据 s = "cast cast sat at a tasa\0"
A c a s t b
C 2 7 4 5 5
*/
//【另一解答】
include <iostream.h>
include "string.h"
const int charnumber = 128; /*ASCII码字符集的大小*/
void frequency( string& s, int& C[ ] )
{
// s是输入字符串,数组C[ ]中记录每一种字符的出现次数。
for ( int i = 0; i < charnumber; i++ ) C[ i] = 0; /*初始化*/
for ( i = 0; i < s.length ( ); i++ ) /*检测串中所有字符*/
C[ atoi (s[ i]) ]++; /*出现次数累加*/
for ( i = 0; i < charnumber; i++ ) /*输出出现字符的出现次数*/
if ( C[ i ] > 0 ) cout << "( " << i << " ) : \t" << C[ i ] << "\t";
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
救赎削肾客
2008-03-05 · TA获得超过1186个赞
知道大有可为答主
回答量:1196
采纳率:0%
帮助的人:935万
展开全部
#include<stdio.h>
#include<ctype.h>
#define M 200
struct node
{int L[27];
char chr[27];
}ch;
char s[M];
main()
{ch.chr[0]='a',ch.chr[1]='b',ch.chr[2]='c',ch.chr[3]='d';
ch.chr[4]='e',ch.chr[5]='f',ch.chr[6]='g',ch.chr[7]='h';
ch.chr[8]='i',ch.chr[9]='j',ch.chr[10]='k',ch.chr[11]='l';
ch.chr[12]='m',ch.chr[13]='n',ch.chr[14]='o',ch.chr[15]='p';
ch.chr[16]='q',ch.chr[17]='r',ch.chr[18]='s',ch.chr[19]='t';
ch.chr[20]='u',ch.chr[21]='v',ch.chr[22]='w',ch.chr[23]='x';
ch.chr[24]='y',ch.chr[25]='z',ch.chr[26]='\0';
printf("put you words\n");
gets(s);
printf("%s\n",s);
tongji();
}
tongji()
{ int i,x,j,k;
char y;
for(i=0;i<M;i++)
if(isspace(s[i]))ch.L[26]=ch.L[26]+1;
for(i=0;i<M;i++)
switch(s[i])
{ case 'a':case 'A' : ch.L[0]=ch.L[0]+1;break;
case 'b':case 'B' : ch.L[1]=ch.L[1]+1;break;
case 'c':case 'C' : ch.L[2]=ch.L[2]+1;break;
case 'd':case 'D' : ch.L[3]=ch.L[3]+1;break;
case 'e':case 'E' : ch.L[4]=ch.L[4]+1;break;
case 'f':case 'F' : ch.L[5]=ch.L[5]+1;break;
case 'g':case 'G' : ch.L[6]=ch.L[6]+1;break;
case 'h':case 'H' : ch.L[7]=ch.L[7]+1;break;
case 'i':case 'I' : ch.L[8]=ch.L[8]+1;break;
case 'j':case 'J' : ch.L[9]=ch.L[9]+1;break;
case 'k':case 'K' : ch.L[10]=ch.L[10]+1;break;
case 'l':case 'L' : ch.L[11]=ch.L[11]+1;break;
case 'm':case 'M' : ch.L[12]=ch.L[12]+1;break;
case 'n':case 'N' : ch.L[13]=ch.L[13]+1;break;
case 'o':case 'O' : ch.L[14]=ch.L[14]+1;break;
case 'p':case 'P' : ch.L[15]=ch.L[15]+1;break;
case 'q':case 'Q' : ch.L[16]=ch.L[16]+1;break;
case 'r':case 'R' : ch.L[17]=ch.L[17]+1;break;
case 's':case 'S' : ch.L[18]=ch.L[18]+1;break;
case 't':case 'T' : ch.L[19]=ch.L[19]+1;break;
case 'u':case 'U' : ch.L[20]=ch.L[20]+1;break;
case 'v':case 'V' : ch.L[21]=ch.L[21]+1;break;
case 'w':case 'W' : ch.L[22]=ch.L[22]+1;break;
case 'x':case 'X' : ch.L[23]=ch.L[23]+1;break;
case 'y':case 'Y' : ch.L[24]=ch.L[24]+1;break;
case 'z':case 'Z' : ch.L[25]=ch.L[25]+1;break;
}
for(i=0;i<27;++i)
{k=i;
for(j=i+1;j<27;j++)
if(ch.L[k]<ch.L[j])k=j;
if(i!=k)
{x=ch.L[i]; y=ch.chr[i];
ch.L[i]=ch.L[k]; ch.chr[i]=ch.chr[k];
ch.L[k]=x; ch.chr[k]=y;
}

}
for(i=0;i<27;i++)
{printf("%c:",ch.chr[i]);
printf("%d\n",ch.L[i]);
}
}
只能统计空格和英文字母的个数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(8)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式