当前位置:编程学习 > C/C++ >>

求解一道关于C语言的编程题

题目如下  要求能运行 谢谢

Write a C program, which reads the file “file.txt” and counts the frequency of each digit (0, 1, 2, ..., 9)/letter (A/a, B/b, …, Z/z). Then, use fork() to duplicate a child process to write the most frequent digit/letter at the end of the file “file.txt”. The parent process output the frequency of each digit/letter to the terminal. You need to call the function “mostfrequent” (which is used for calculating the most frequent digit/letter defined below) in your program.

int mostfrequent(int * a, int length) /*length is the length of the array. The function returns the index of the largest value of array a.*/

{

  int index=0;

  int max=a[0];

  int i;

  for(i=1;i<length;i++)

  if (a[i]>max)

  {

    max = a[i];

    index = i;

  }

 

  return index;

 

}

 

 

追问:能不能具体写一下呢?  我要的是程序   那个函数的作用题目已经解释过了 函数要用到那个程序里面
答案://Author: shajin
//Function: A C program, which reads the file “file.txt” and
//counts the frequency of each digit (0, 1, 2, ..., 9)/letter (A/a, B/b, …, Z/z).
//Then, use fork() to duplicate a child process to write the most frequent digit/letter
//at the end of the file “file.txt”. The parent process output the frequency of each
//digit/letter to the terminal
//Time: 2009-7-22


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
//对照偏移表
int toCompare[] = {48,49,50,51,52,53,54,55,56,57        //0~9 是 48~57  
,65,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90   //A~Z 是 65~90
,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122}; //a~z 是 97~122

////统计变量
static int count[56]={0};

char* AnalysisFile(char* fileName,char*& pBuf);    //把文件中的数据解析成char数组,保存在pBuf中
void mostfrequent(char* fileName,char *p);   //
void main()
{
 char* name = "file.txt";
 char* p = NULL;
 mostfrequent(name,p);

}

//读取文件,将读到的内容写入一个pBuf缓冲区中,将文件中的内容都以ASCII形式看待
char* AnalysisFile(char* fileName,char*& pBuf)
{
 FILE *pFile;
 int i = 0;
 if((pFile =fopen(fileName,"r")) == NULL)
 {
  printf("cannot open this file\n");
  exit(0);
 }
 fseek(pFile,0,SEEK_END); //将文件指针移动到文件的末尾
 int len = ftell(pFile);  //得到文件的长度
 pBuf =(char*)malloc(len*sizeof(char)+1); //
 if(!pBuf)
 {
  printf("ERROR:致命错误,内存分配失败!");
  exit(0);
 }
 rewind(pFile);    //将文件指针重新移到文件头,以准备读取数据
 pBuf[0] = fgetc(pFile);  
 while(pBuf[i] != EOF)
 {
  pBuf[i++] = fgetc(pFile);
 } 
 pBuf[len] = 0;    //将最后一个置为0,做结束符
 return pBuf;    //返回指针pBuf的引用  
}

void mostfrequent(char* fileName,char *p) //参数是文件名和和一个缓冲区p,p用于接收AnalysisFile函数返回的pBuf
{
 int len,max;
 char ch;
 AnalysisFile(fileName,p);    //解析文件为char数组,保存到p
 len = strlen(p);
    for(int i=0;i<56;i++)     //这里的56来自toCompare数组中总共用56个数
 {
  for(int j=0;j<len;j++)    //文件解析为char*后,char数组的长度
  {
   if(p[j] == toCompare[i])  //把解析的char数组的每一个字符的ASCII码和toCompare数组比较
    count[i]++;
  }
 }
 max = count[0];       //此段代码及后找出使用频率最大的字符,输出其字符和次数
 for(int k=0;k<56;k++)
 {
  if(max<count[k])
  {
   max =count[k];
   ch = toCompare[k];    //把ASCII码赋给char类型,输出自动转换为char
   
  }
 }
 
 printf("出现最多次数的字符是:%c",ch);
 printf("\t");
 printf("次数=%d \n",max);
 }

 

 

 

这是我照你的要求做的一个比较通用的解法 ,希望能够帮得到你。希望你能够在吃透上面的解法后,能够自己在做一遍,或找找其他的解法(像上面那样的解方法,我也花了一些时间构思),这样进步才快。如果你在使用的过程中发现bug,请花一点点儿时间告诉我:zhoushajin@gmail.com

函数的用处就是找到数组中一个最大的数,并返回他的标号

要求是写一个程序统计数字和字母的使用频率吧。。

上一个:有什么有关c语言可以学习的东西么
下一个:学习C语言从那开始出发。

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,