用.net或c语言编码,读取txt文件,并对txt文件中的字数统计个数,计算概率并排序。

用.net或c语言编码,读取txt文件,并对txt文件中的字数统计个数,计算概率并排序。如:txt文件中有一段字符,a的个数有5个,b的个数有8个……,a的概率为10%,b的概率为16%……,所以b>a>……

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN sizeof(Charactor)

typedef struct charactor
{
char key[3];
int count;
struct charactor *next;
}Charactor;

Charactor *add(char *c,Charactor *head) //查找记数
{
int flag=1;
Charactor *p=head;
while(p!=NULL&&flag==1)
{
if(strcmp(p->key,c) == 0)
{
flag=0; break;
}
else
{
p=p->next;
}
}

if(flag==0)
p->count++;
else
{
p=head;

head=(Charactor *)malloc(LEN);
strcpy(head->key,c);
head->count=1;
head->next=p;
}
return head;
}

void display(Charactor *p) //输出
{

printf("\n The result are:\n");
while(p!=NULL)
{

printf("%s: %d\n",p->key,p->count);
p=p->next;
}
}

void main()
{
Charactor *head=NULL;
char ch[2];
char str[100];
FILE *fstream;
FILE *fp=fopen("d:\\1.txt","w");
printf("此程序只能统计中文\n");
printf("请输入一个中文字符串\n");
fflush(stdin);
gets(str);

fprintf(fp,str); fclose(fp);
if((fstream = fopen("d:\\1.txt","r")) == NULL)
{ exit(-1); }

while( !feof(fstream) )
{ ch[0]=32;
ch[1]=32;
fscanf(fstream,"%2s",ch);
if(ch[0]==32&&ch[1]==32)
{
break;
}
head=add(ch,head);

}

display(head);

system("PAUSE");
}

c语言编码 vc6.0通过 统计您输入的字符出现的个数
觉得满意 联系我 然后我给你完善程序追问

不是输入字符并统计,而是读取一个txt格式的文件,里面全是英文字符,没有中文。你的程序能将它改成“读取文件并统计字符”吗?如果可以,我可以追分。

追答

可以改成 你加我百度ID
把你具体要的答案 和我沟通一下
然后我给你写

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-22
  下面的代码可以实现,不过效率可能不是很好,你可以修改下算法。Form界面需要的是一个Button(button1),一个TextBox(textBox1)

  //点击button,检查textBox1输入的字符串
  private void button1_Click(object sender, EventArgs e)
  {
  if(textBox1.Text!=""&&textBox1.Text!=null)
  {
  string checkstring = textBox1.Text;
  Hashtable ht = new Hashtable();
  for (int i = 0; i < checkstring.Length; i++)
  {
  if (!ht.Contains(checkstring[i]))
  {
  ht.Add(checkstring[i], 1);
  }
  else
  {
  ht[checkstring[i]] = (int)ht[checkstring[i]] + 1;
  }
}

  string result = "";
  string[] keys = sort(ht,checkstring.Length);
  for (int i = 0; i < keys.Length;i++ )
  {
  result += keys[i]+ "\n";
}

  MessageBox.Show(result); //显示结果
  }
  }
  //排序
  private string[] sort(Hashtable ht,int totalchar)
  {
  string[] keys = new string[ht.Count];
  int i = 0;
  double maxvalue = 0;
  char currentkey = ' ';
  while (ht.Count > 0)
  {
  foreach (var item in ht.Keys)
  {
  if ((int)ht[item] > maxvalue)
  {
  currentkey = Convert.ToChar(item);
  maxvalue = (int)ht[item];
  keys[i] = item.ToString() + "," + (maxvalue / totalchar * 100).ToString("#0.00") + "%";
  }
  }
  ht.Remove(currentkey);
  maxvalue = 0;
  i++;
  }
  return keys;
}
第2个回答  2012-11-22
想做哈夫曼树吗?
如果有汉字,就麻烦了。
如果在ASCLL码范围内,直接建立一个size为256的vector,按字节读入,按下标改变权值,重写算法库的sort函数的cmp函数或者写个堆排就可以了
第3个回答  2012-11-21
如果字符种类不多的话,用hash吧,运算次数= (Total - 种类个数)*1次.
最后存到Array里,重写sort方法,交换排序.

用.net或c语言编码,读取txt文件,并对txt文件中的字数统计个数,计算概率...
char str[100];FILE *fstream;FILE *fp=fopen("d:\\\\1.txt","w");printf("此程序只能统计中文\\n");printf("请输入一个中文字符串\\n");fflush(stdin);gets(str);fprintf(fp,str); fclose(fp);if((fstream = fopen("d:\\\\1.txt","r")) == NULL){ exit(-1); } while( !fe...

(急)求帮忙写一个C语言程序,大体就是计算一句话中各字母出现的次数,并...
读取计数清空我就不说了,我相信你能处理 说说画图,这里是这样的 一次画一条| 那么我们可以这样做,先找到26个字母里面最多的那个 然后 for(i= max; i>0; i--)for(j=0; j<26; j++)if( char_count[j] == i )printf(" |");else printf(" ");大概思路就是这样 ...

...功能:输入一页文字,程序可以统计出文字,数字,空格的个数_百度...
include <stdio.h>#include <string.h>#include <stdlib.h>#include <ctype.h>FILE *fp; \/\/输入文件\/*** 函数功能:统计文件中的全部字母数、数字个数、空格个数、总字数*\/void get_count( int *count ){char input[81];int i ;while( fgets( input, 80, fp ) != NULL ){i = ...

.输入一带空格的字符串,计算其中空格的个数,并计算出字符串的长度。(不...
int GetLength(const char *strSource,int& Space){ assert(strSource!=NULL);int iLength=0;while(*strSource!='\\0'){ if (*strSource++==' '){ Space++;} iLength++;} iLength--;return iLength;}

如何在C++中 统计多行文本中的行数、单词数及字符数
txt(vector<char> cha){ch = cha;} void count_word(); \/\/统计单词数 void count_line(); \/\/统计行数 void count_ch(); \/\/统计字符数 private: vector<char> ch; }; void txt::count_line() { int count = 0; for (int i=0;i < ch.size();i++) { if ('\\012' == ch[i]) coun...

【急】求C语言高手帮忙做一个字数统计的C程序、大恩不言谢!
看空格和回行吧,读到空格或者回行,就认为是上一个单词结束。fopen()打开文件 fgets()读取字符,可以指定一次读多少 fclose()关闭文件

C++中怎么计算字符串中中文字符的个数
计算中文字符的个数,不就是除去英文,数字,空格,标点么?所以你只需 中文个数=总字数-英文-空格-标点-数字 就行了 总字数 sizeof(char)英文,数字,空格,通过查ASCII码,你可以对它计数了。如英文a-z就是 97~122, 其他的你就自己查了 基本流程:if(str[i]>=97&&str[i]<=122)cout++;...

求统计记事本文档中的汉字字数的C语言代码?
先说下~~这个记事本 全是汉字么分段落么?段落开头是空两个字么段落之间 是挨着的 还是 用回车符分开的

求解几道C语言试题,急!!!
1 主函数,输入学生个数n,开辟内存空间,组织调用其他函数,输入统计结果 2 输入函数,输入n个学生的数据 3 统计函数,统计男女前三名 (4) 我们需要同时处理三个文件。文件addr.txt记录了某些人的姓名和地址;文件tel.txt记录了顺序不同的上述人的姓名和电话号码。希望通过对比两个文件,将同一人的...

Word文档中如何快速统计文档中的页数、段落数和字数?
在Word中,可以通过字数统计功能来快速统计文档中的页数、段落数和字数,其具体操作步骤: 1、单击审阅---字数统计按钮; 2、弹出字数统计对话框,文档中的页数、段落数和字数等信息,如图所示。 本回答由电脑网络分类达人 陈泳仪推荐 举报| 答案纠错 | 评论 1 2 nicellccyy64 采纳率:84% 来自团队:百度与你同在...

相似回答