统计输入字符各个字母出现频率的解题思路_C 语言

本文跟大家分享的是编写一个程序,能够计算输入字符各个字母出现的频率,具体如下

 先跟大家展示一下最终结果:

刚刚接手题目的时候,我想得很复杂,因为26个字母中有大小写嘛,小写a~z,大写A~Z

但是,无论是大写还是小写,字母都只有26个,在此,当输入大写字母的时候,我们就将其转换为小写就ok啦

大写字母转换为小写字母,有个很方便的函数tolow(),在ctype.h中,详情文章末。

看过前一篇文章《c语言:计算输入字符个数》中使用数组统计单词长度的方法,在统计字母的个数的时候,依旧可以,只不过有些"小技巧"。

大小写转换与计算

if(isalpha(c)) /*详情见文末*/
{
c = tolower(c); //大写转换为小写
++char_count[c-'a'];
}

通过上面的代码将26个字母出现的频率统计后(都存在数组中),再来打印直方图,何为直方图,就是那张图拉,向上看。

由于要画直方图,所以用用到两个for循环语句,通过观察可以知道,直方图的行数由max决定。

max如何求呢,看如下代码:

max = 0;  //初始化

/*找出出现频率最高的字母*/
  for(x = 0; x < 26; x++)
  {
    if(char_count[x] > max)
    {
      max = char_count[x];
      printf("max is %d", max);
    }
  }

现在max也知道了,来画出直方图吧:

/*打印直方图*/
  for(; max > 0; max--)
  {
    for(x = 0; x < 26; x++)
    {
      if(char_count[x] >= max)
      {
        putchar('x');
      }
      else
        putchar('');
    }
    putchar('\n');
  }

现在一切都ok啦,还差一个横坐标,不然我们咋知道每一列代表的是哪一个字母呢:

/*打印下标,即abcdefghijklml....*/
  for(x = 0; x < 26; x++)
  {
    putchar('a'+x);
  }

完整代码:

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

 main()
 {
   int x; //数组下标变量,详情看代码
   int max;  //出现频率最高的字母
   int char_count[26]; //26个字母出现字数的统计
   char c;

 /*将数组初始化,因为我们还没有输入嘛,所以a~z都为0啦*/
   for( x= 0; x < 26; x++)
   {
     char_count[x] = 0;
   }

   while((c = getchar()) != EOF)
   {
     if(isalpha(c)) /*详情见文末*/
     {
       c = tolower(c); //大写转换为小写
       ++char_count[c-'a'];
     }
   }

   max = 0;  //初始化

 /*找出出现频率最高的字母*/
   for(x = 0; x < 26; x++)
   {
     if(char_count[x] > max)
     {
       max = char_count[x];
       printf("max is %d", max);
     }
   }

 /*打印直方图*/
   for(; max > 0; max--)
   {
     for(x = 0; x < 26; x++)
     {
       if(char_count[x] >= max)
       {
         putchar('x');
       }
       else
         putchar('');
     }
     putchar('\n');
   }
 /*打印下标,即abcdefghijklml....*/
   for(x = 0; x < 26; x++)
   {
     putchar('a'+x);
   }
   return 0;

 }

ps:

以上就是计算输入字符各个字母出现频率的整体解题思路,希望对大家的学习有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c语言
初一动点问题解题思路、初中动点问题解题思路、解题思路、法条分析题的解题思路、板块模型解题思路,以便于您获取更多的相关知识。

时间: 2024-09-26 19:43:04

统计输入字符各个字母出现频率的解题思路_C 语言的相关文章

C语言编程中统计输入的行数以及单词个数的方法_C 语言

统计输入的行数 标准库保证输入文本流以行序列的形式出现,每一行均以换行符结束.因此,统计行数等价于统计换行符的个数. #include <stdio.h> /* count lines in input */ main() { int c, nl; nl = 0; while ((c = getchar()) != EOF) if (c == '\n') ++nl; printf("%d\n", nl); } 在该程序中,while 循环语句的循环体是一个 if 语句,它控

FCKEidtor 自动统计输入字符个数(IE)_网页编辑器

此方法支持IE 不支持火狐.可能是因为FCKEidtor的keyup方法在火狐下不被支持. FCKEditor编辑器换为TextBox,应该就没有问题了. 前台: 复制代码 代码如下: <tr> <th> 短敘述 <br /> (限100中文字)<br /> 當前文字個數:<asp:Label ID="lblShowTextLength" runat="server" Text="0" For

输入一个字符串,取出其中的整数(实现代码)_C 语言

题目:输入一个字符串,内含所有数字和非数字字符.将其中连续的数字作为一个整数,依次存放到一个数组中,统计共有多少个整数,并输出这些数. 复制代码 代码如下: #include<iostream>using namespace std;int main(){    int a[30]={0};    char str[200];    cout<<"请输入一个含有数字的字符串\n"<<endl;    cin>>str;    bool f

C++实现将一个字符串中的字符替换成另一个字符串的方法_C 语言

本文实例讲述了C++实现将一个字符串中的字符替换成另一个字符串的方法,分享给大家供大家参考.具体方法如下: 题目要求: 原地实现字符串中的每个空格替换成"%20",例如输入"We are happy", 输出"We%20are%20happy" 被替换的字符串当然不仅仅是空格,上面只是个例子 这是道很好的题目,也是百度面试中的一道题,题目不难,但是问题得考虑全面.这里给出如下实现代码: #include <iostream> #inc

用C语言判断字符是否为空白字符或特殊字符的方法_C 语言

C语言isspace()函数:判断字符是否为空白字符头文件: #include <ctype.h> 定义函数: int isspace(int c); 函数说明:检查参数c是否为空格字符,也就是判断是否为空格(' ').定位字符(' \t ').CR(' \r ').换行(' \n ').垂直定位字符(' \v ')或翻页(' \f ')的情况. 返回值:若参数c 为空白字符,则返回非 0,否则返回 0. 附加说明:此为宏定义,非真正函数. 范例:将字符串str[]中内含的空格字符找出,并显示

c语言字符数组与字符串的使用详解_C 语言

1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y'};即把10个字符分别赋给str[0]到str[9]10个元素如果花括号中提供的字符个数大于数组长度,则按语法错误处理:若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即 '\0' ). 2.字符数组与字符串在c语言中,将字符串作为字符数组来处理.(c++中不是)在实际应用

javascript 动态统计文本域输入字符个数

下载:http://download.csdn.net/detail/cometwo/9375704   <script language="javascript">   //countChar(a,b)为多行文本框统计输入字符   function countChar(textareaName,spanName){   var maxLimit=70;   var textArea=document.getElementById(textareaName);   var

C语言统计字符个数代码分享_C 语言

C语言实现统计字符个数 #include<stdio.h> int main() { int sz[10]={0},zm[26]={0},z[26]={0},i,space=0,e=0,t=0; char c; printf("请输入一段字符,统计其中各字符的数量\n"); while((c=getchar())!='\n') { if(c<='z'&&c>='a') zm[c-'a']++; else if(c<='Z'&&

c++编程题统计输入的内容中有几个字母、数字和其他字符

问题描述 c++编程题统计输入的内容中有几个字母.数字和其他字符 2.统计输入的内容中有几个字母.数字和其他字符. 提示: (1)变量c应该定义为int. 这是因为后面的EOF常量的值超出了字符类型char的表示范围. EOF的值一般为-1 (2)程序示例比较粗糙, 自行考虑是否应该选用if ... else ...结构 (3)判定是否为字母和数字,系统有库函数可供选用.#include int c; while ((c=getchar())!=EOF){ if (c是字母) ... if (c