求解一道关于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语言从那开始出发。