Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4842966
  • 博文数量: 930
  • 博客积分: 12070
  • 博客等级: 上将
  • 技术积分: 11448
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 16:57
文章分类

全部博文(930)

文章存档

2011年(60)

2010年(220)

2009年(371)

2008年(279)

分类: LINUX

2009-08-09 15:00:50

有一段文本,由英文字母、阿拉伯数字、GB2312编码的中文字符和一些常用标点符号(假设只包含全/半角的逗号和句子)组成。请写出程序,统计这段文本中每个字的出现次数,对“字”的定义如下:
1,连续的英文字母或者阿拉伯数字,例如ab3123,但最长不超过32个字符;
2,包含不超过一个半角句点的两段连续数字,例如2.34,但最长不超过32个字符
3,单个汉字
 
 
                        汉字编码范围

名称

第一字节

第二字节

GB2312

0xB0-0xF7(176-247)

0xA0-0xFE160-254

GBK

0x81-0xFE129-254

0x40-0xFE64-254

Big5

0x81-0xFE129-255

0x40-0x7E64-126

0xA10xFE161-254

#include <stdio.h>
#include <stdlib.h>

#define MAX_LEN 100
#define MAX_WORD 32

int is_words(char* str)
{
  int flag1 = 0;
  int flag2 = 0;
  char* tmp = str;
  while(*tmp)
   {
     if(*tmp>='0' && *tmp<='9' )
       tmp++;
     else if(*tmp == '.')
       {
        flag1 = 1;
        tmp++;
        }
     else
      {
       flag2 = 1;
       tmp++;
      }
   }
   
  if(flag1 && flag2)
   return 0;
  else
   return 1;
}

int main(int argc, char *argv[])
{
  int count = 0;
  int i = 0;
  int j = 0;
  
  char line[MAX_LEN];
  char words[MAX_WORD];
  FILE* fp = fopen("words.txt","r");
  while(fgets( line, MAX_LEN, fp))
   {
    i = 0;
    while(line[i]!='\n'&&line[i]!='\0')
    {
      if(line[i]&0x80)
      {
       unsigned char ch1 = (unsigned char)(line[i]);
       unsigned char ch2 = (unsigned char)(line[i+1]);
       
       if( ch1>=0xB0 && ch1<=0xF7 && ch1>=0xA0 && ch1<=0xFE )
         {
           char chinese[3];
           snprintf( chinese, 2, "%s", line+i);
           chinese[2] = '\0';
           count++;
           printf("chinese words %d is %s\n", count, chinese);
         }
        i += 2;
      }
      else
      {
        words[j] = line[i];
        i++;
        j++;
        if(line[i]&0x80)
         {
           words[j] = '\0';
           if(is_words(words))
            {
             count++;
             printf("number words %d is %s\n", count, words);
            }
           j = 0;
         }
       }
     }
   }
  
  system("PAUSE");    
  return 0;
}

阅读(801) | 评论(0) | 转发(0) |
0

上一篇:文件记录排序

下一篇:COW,fork,动态链接库

给主人留下些什么吧!~~