C语言K&R习题系列——统计一段文字中各个字母出现的频率

原题:

/*Write a program to print a histogram of the frequencies of

*difficent characters in it inputs

*/

这个和上一个类似

输入部分

#include < stdio.h >

 #define NUM_CHARS 256

 main ( void )
 {
    int c;
    int done = 0;
    int thisIdx = 0;
    long frequrr[NUM_CHARS + 1];
    long thisVal = 0;
    long maxVal = 0;
    //initialize
    for ( thisIdx = 0; thisIdx <= NUM_CHARS; thisIdx++ )
    {
        frequrr[thisIdx] = 0;
    }

    while ( done == 0 )
    {
        c = getchar();

        if ( c == EOF )
        {
            done = 1;
        }

        if ( c < NUM_CHARS )
        {
            thisVal = ++frequrr[c];
            if ( thisVal > maxVal )
            {
                maxVal = thisVal;
            }
        }
        else
        {
            thisVal = ++frequrr[NUM_CHARS];
            if ( thisVal > maxVal )
            {
                maxVal = thisVal;
            }
        }
    }

输出部分

for ( thisVal = maxVal; thisVal >0; thisVal-- )
    {
        printf ( "%2d |", thisVal );
        for ( thisIdx = 0; thisIdx <= NUM_CHARS; thisIdx++ )
        {
            if ( frequrr[thisIdx] >= thisVal )
            {
                printf ( "*" );
            }
            else if ( frequrr[thisIdx] > 0 )
            {
                printf ( " " );
            }
        }
        printf ( "\n" );
    }
    printf ( "   |_" );
    for ( thisIdx = 0; thisIdx < NUM_CHARS + 1; thisIdx++ )
    {
        if ( frequrr[thisIdx] > 0 )
        printf ( "_");
    }
    printf ( "\n    " );
    for ( thisIdx = 0; thisIdx < NUM_CHARS + 1; thisIdx++ )
    {
        if ( frequrr[thisIdx] > 0 )
        printf ( "%d", ( thisIdx + 1 ) / 100 );
    }
    printf ( "\n    " );
    for ( thisIdx = 0; thisIdx < NUM_CHARS + 1; thisIdx++ )
    {
        if ( frequrr[thisIdx] > 0 )
        printf ( "%d", ( thisIdx + 1 ) / 10 % 10 );
    }
    printf ( "\n    " );
    for ( thisIdx = 0; thisIdx < NUM_CHARS + 1; thisIdx++ )
    {
        if ( frequrr[thisIdx] > 0 )
        printf ( "%d", ( thisIdx + 1 ) % 10 );
    }
    printf ( "\n" );
    return 0;
 }

运行结果

时间: 2024-11-03 20:45:42

C语言K&R习题系列——统计一段文字中各个字母出现的频率的相关文章

C语言K&R习题系列——统计一段文字中各个字母出现的频率

原题: /*Write a program to print a histogram of the frequencies of *difficent characters in it inputs */ 这个和上一个类似 输入部分 #include < stdio.h >    #define NUM_CHARS 256    main ( void )  { int c; int done = 0; int thisIdx = 0; long frequrr[NUM_CHARS + 1];

C语言K&R习题系列——统计文档中每个单词所占字母个数,以直方图形式输出

原题: Write a program to print a histogram of the lengths of words in its input. It is easy to draw the histogram with the bars horizontal; a vertical orientation is more challenging. 这也是我第一个过百行的代码(带注释,空格什么的) 主要分两个部分:输入和输出 #include < stdio.h > #define

C语言K&R习题系列——句子中一个空格代替多个空格的四种方法

原题: Write a program to copy its input to its output, replacing each string of one or more blanks by a single blank. 第一种: 这种最常用,设置一个inspace作为布尔变量,标志当前输入是否在字符中,或在字符外 #include <stdio.h>   int main(void) {   int c;   int inspace=0;     while((c = getcha

C语言K&R习题系列——使用缓冲区函数接受长字符输入

原题: Write a program to print all input lines that are longer than 80 characters.  ,实现起来不算难,关键是用到了缓冲区,很不错的一种思想! /* Write a program to print all input lines  * that are longer than 80 characters  */    #include < stdio.h >    #define MINLENGTH 81    /

C++统计一段文字中各单词出现的频率

#include <iostream> using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ class SqString{private: char * base; int length;public: SqString() { } SqString(char * s) { lengt

C语言K&amp;R习题系列——句子中一个空格代替多个空格的四种方法

原题: Write a program to copy its input to its output, replacing each string of one or more blanks by a single blank. 第一种: 这种最常用,设置一个inspace作为布尔变量,标志当前输入是否在字符中,或在字符外 #include <stdio.h> int main(void) { int c; int inspace=0; while((c = getchar()) != EO

统计一段文字中数组、中文、英文字母、空格以及其他特殊字符出现的次数

package util; public class CountStr { /** * 有一个字符串,其中包含中文字符.英文字符和数字字符,请统计和打印出各个字符的个数 * 短信发送平台,短信字数控制查询方法 */ public static void main(String[] args) { //String str = "adasf AAADFD我是中文,,>123"; //String str = "金马甲高端商品交易平台--2013全城热恋克拉钻石项目预售,1

The C Programming Language(K&R) 扣细节随记(施工中...

各种糟糕,入坑这么久才开始看K&R的The C Programming Language学C,而且还是为了应付开学某场滚回本体的考试(虽然觉着即使复习了还会被各种吊打),废话不多说,开始施工.? ? |--> 导言 整数除法会执行舍位,故要先乘后除. 数据类型: 关键字 位长(字节) 范围 格式化字符串 char 1 bytes -128..127(或0..255,与体系结构相关) ?%c unsigned char 1bytes 0..255 ?%c,?%hhu signed char 1

【华为OJ平台练习题】统计一段字符串中含有空格、英文、数字的个数

//统计一段字符串中含有空格.英文.数字的个数 #include <iostream> using namespace std; void processString(char* s) { int n = strlen(s); int kg=0; int shuzi=0; int yingwen=0; if(n>0) { for(int a=0;a<n;a++) { if(s[a]==' ') kg++; if(s[a]<='9'&&s[a]>='0')