| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9141 人关注过本帖, 1 人收藏
标题:统计英文文本每个字母的出现次数!
只看楼主 加入收藏
C语言学徒
Rank: 2
来 自:NamKing
等 级:论坛游民
帖 子:51
专家分:22
注 册:2009-2-27
结帖率:90%
收藏(1)
已结贴  问题点数:18 回复次数:11 
统计英文文本每个字母的出现次数!
如题:以下是我自己写的程序,可以运行,求一个更好的,个人感觉我的好像看着有点不爽。怕考试不给满分哦!
#include <stdio.h>
#include <string.h>
#define N 100
void main()
{char s[N],word[26];
int i,j,n=1,num[26];
for(i=0,j=65;i<26;i++,j++)
{word[i]=j;
 num[i]=0;
 }
 printf("Input a string:");
 gets(s);
 puts(s);
 for(i=0;i<strlen(s);i++)
 {if(s[i]>='a'&&s[i]<='z')
  s[i]=s[i]-32;
  for(j=0;j<26;j++)
  {if(s[i]==word[j])
    num[j]++; }
  }
 printf("The list:\n");
 for(i=0;i<26;i++)
 if(num[i]!=0)
  {printf("%c : %d    ",word[i],num[i]);
    n++;
   if(n==6)
   {printf("\n");
   n=1;
   }

  }
getch();
}
搜索更多相关主题的帖子: 统计 英文 字母 文本 
2009-10-22 22:32
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
如果你说的是txt文本,是不是应该先打开文件呢?

我可好玩啦...不信你玩玩^_^
2009-10-22 22:44
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:18 
可以省去保存26个字母的word数组,再加上对不是字母的判断,根据你给的程序改动如下:
程序代码:
#include <stdio.h> 
#include <string.h> 
#define N 100 
int main(void) 
{ 
 char s[N]; 
 int i,n=0,num[26]={0}; 
 printf("Input a string:"); 
 gets(s); 
 for(i=0;i<strlen(s);i++) 
   { 
    if(s[i]>='a'&&s[i]<='z') 
      num[s[i]-97]++; 
    else if(s[i]>='A'&&s[i]<='Z') 
      num[s[i]-65]++; 
   } 
 printf("The list:\n"); 
 for(i=0;i<26;i++) 
   if(num[i]!=0) 
     {
      printf("%3c:%2d\t",i+65,num[i]); 
      n++; 
      if(n==6) 
       { 
        printf("\n"); 
        n=0; 
       } 
     } 
 printf("\n\n"); 
 getch(); 
 return 0; 
}

努力—前进—变老—退休—入土
2009-10-22 23:03
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
for(i=0;i<strlen(s);i++)  

在s字符串长度不变的情况下, 建议楼主给一个变量给strlen(s),不然每循环一次会调用一次strlen函数计算长度,

循环次数越多调用次数越多. 谁也不知道你的英文文本有多长不是?
2009-10-23 08:10
蓝色药剂
Rank: 4
等 级:业余侠客
帖 子:43
专家分:204
注 册:2007-11-24
收藏
得分:0 
// CountEnglish.cpp : 定义控制台应用程序的入口点。
//
 
#include "stdafx.h"
 
#define COUNT (26)
#define A_DEC (97)
#define Z_DEC ((A_DEC)+(COUNT)-1)
 
int _tmain(int argc, _TCHAR* argv[])
{
    int chInput,chTemp;
    int num[COUNT] = {0};
 
    FILE *fp = fopen("CountEnglish.cpp","r");  // 打开一个文件
    while((chInput = fgetc(fp)) != EOF)
    {
        chTemp = chInput | 0x40;  // 所有字母统一为小写
 
        if(chTemp >= A_DEC && chTemp <= Z_DEC)
            num[chTemp-A_DEC]++;
    }
    fclose(fp);
 
    // 打印结果
    for(int i=0; i<COUNT; i++)
        printf("char: %c, count: %d\n",(A_DEC+i),num[i]);
 
    getchar();
 
    return 0;
}
 
看看行不,编译环境VS2008
2009-10-23 09:42
cjslaser2001
Rank: 1
等 级:新手上路
帖 子:8
专家分:4
注 册:2009-9-28
收藏
得分:0 
所有字母统一为小写,怎么是或0x40,不是或0x20吗?
2009-10-23 09:57
cjslaser2001
Rank: 1
等 级:新手上路
帖 子:8
专家分:4
注 册:2009-9-28
收藏
得分:0 
回复 5楼 蓝色药剂
所有字母统一为小写,怎么是或0x40,不是或0x20吗?
2009-10-23 09:58
cjslaser2001
Rank: 1
等 级:新手上路
帖 子:8
专家分:4
注 册:2009-9-28
收藏
得分:0 
回复 5楼 蓝色药剂
主函数定义成int _main()是什么编译器的规定,请不吝赐教?
2009-10-23 10:00
cjslaser2001
Rank: 1
等 级:新手上路
帖 子:8
专家分:4
注 册:2009-9-28
收藏
得分:0 
回复 5楼 蓝色药剂
主函数定义成int _tmain()是什么编译器的规定,请不吝赐教?
2009-10-23 10:00
蓝色药剂
Rank: 4
等 级:业余侠客
帖 子:43
专家分:204
注 册:2007-11-24
收藏
得分:0 
回复 7楼 cjslaser2001
看下字母的大小写二进制,只有第6位bit不同,这样转换比较方便
2009-10-23 10:04
快速回复:统计英文文本每个字母的出现次数!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.054080 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved