在线工具 在线编程 在线白板 在线工具 在线编程 在线白板

请高手帮忙把代码调试成功并注释(云计算),急急急!在线等 答得好分数可追加!

有没有人在啊,想请讲解下,请高手帮忙把代码调试成功并注释(云计算),急急急!在线等 答得好分数可追加!?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUF_SIZE 2048

int my_map(char *buffer,char (*mapbuffer)[100]);
int my_reduce(char (*mapbuffer)[100],char (*reducebuffer)[100],int *count,int num);

int main(int argc,char *argv[])d
{
char buffer[BUF_SIZE];
char mapbuffer[BUF_SIZE][100];
char reducebuffer[BUF_SIZE][100];
int count[BUF_SIZE]={0};
int num;
int i;
int countnum;
fgets(buffer,BUF_SIZE-1,stdin);
buffer[strlen(buffer)-1]='\0';
num=my_map(buffer,mapbuffer);
printf("this is map results:\n");
for(i=0;i<num;i++)
{
printf("<%s\t1>\n",mapbuffer[i]);

}
countnum=my_reduce(mapbuffer,reducebuffer,count,num);
printf("this is reduce results:\n");
for(i=0;i<countnum;i++)
{
printf("<%s\t%d>\n",reducebuffer[i],count[i];
}
}

int my_map(char *buffer, char(*mapbuffer)[100])
{
char *p;
int num=0;
if(p=strtok(buffer, " ")
{
strcpy(mapbuffer[num],p);
num++;
}
else
return num;
while(p=strtok(NULL,""))
{
strcpy(mapbuffer[num],p);
num++;
}
return num;

}

int my_reduce(char (*mapbuffer)[100], char(*reducebuffer)[100],int *count,int num)
{

int i,j;
int flag[BUF_SIZE]={0};
char tmp[100];
int countnum=0;
for(i=0;i<num;i++)
{
if(flag[i]==0)
{
strcpy(tmp,mapbuffer[i]);
flag[i]=1;
strcpy(reducebuffer[countnum],mapbuffer[i]);
count[counnum]=1;
for(j=0;j<num;j++)
{
if(memcmp(tmp,mapbuffer[j],strlen(tmp))==0 && (strlen(tmp)==strlen(mapbuffer[j]))&& (flag[j]==0)
{
count[countnum]++;
flag[j]=1;
}
}
countnum++;
}
}
return countnum;
}
输入: this is map reduce hello map hello reduce
求注释,重点是注释,麻烦大侠补充一下,不胜感激!!!
最新回答
林间有新绿

2024-11-23 10:35:51

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUF_SIZE 2048

int my_map(char *buffer,char (*mapbuffer)[100]); //函数参数 一个char*指针 和 一个 mapbuffer指针指向一个一位字符数组 就是一个一维数组和二维数组
int my_reduce(char (*mapbuffer)[100],char (*reducebuffer)[100],int *count,int num);

int main(int argc,char *argv[]) //多了一个d
{
char buffer[BUF_SIZE];
char mapbuffer[BUF_SIZE][100];
char reducebuffer[BUF_SIZE][100];
int count[BUF_SIZE]={0}; //记录位全部置0 显示字符子串个数
int num;
int i;
int countnum;
fgets(buffer,BUF_SIZE-1,stdin); //从 buffer 中读入 BUD_SIZE-1个数据 读完后清除缓冲区内容,输入数组buffer 功能
buffer[strlen(buffer)-1]='\0'; // 输入完毕后 说明字符串结束
num=my_map(buffer,mapbuffer); //接收返回值
printf("num:%d\n",num);
printf("this is map results:\n");
for(i=0;i<num;i++)
{
printf("<%s\t1>\n",mapbuffer[i]); //输出二维数组对应的一维数组 即每一个输出 [i][0]-[i][100]

}
countnum=my_reduce(mapbuffer,reducebuffer,count,num); //接收返回值
printf("countnum:%d\n",countnum);
printf("this is reduce results:\n");
for(i=0;i<countnum;i++) //
{
printf("<%s\t%d>\n",reducebuffer[i],count[i]); //漏了一个右括号 输出 二维数组对应的一维数组 和一维数组
}
return 0; //没有返回一个 0 对应int main()
}

int my_map(char *buffer, char(*mapbuffer)[100]) //这个函数作用是分割你在主函数输入的字符以空格为分割标准 返回分割后字符串个数
{
char *p;
int num=0;
if(p=strtok(buffer, " ")) //漏了一个右括号 strok 为分解字符串 碰上空格就分解字符串将一个字符串以空格为界分成两个
{
strcpy(mapbuffer[num],p); //用一个二维数组接收 分解好第一个字符串的首地址
num++; //自加移动到二维数组 的下一列 记录分解次数 分割字符串个数
}
else
return num; //如果字符串到了尾部 返回NULL 就直接返回 分解次数 分割字符串个数
while(p=strtok(NULL," ")) //碰到下一个空格继续进行分割 知道 没有空格为止
{
strcpy(mapbuffer[num],p);
num++;
}
return num; //返回 分割字符串个数
//将 buffer 的字符 分割后送给了二维数组 mapbuffer
}

int my_reduce(char (*mapbuffer)[100], char(*reducebuffer)[100],int *count,int num) //这个函数主要作用计算分割字符子串的相同个数
{
//mapbuffer 是分割的字符串
int i,j;
int flag[BUF_SIZE]={0}; //定义一个记录数组 表示已存在的字符子串
char tmp[100];
int countnum=0;
for(i=0;i<num;i++) //收索到分割的字符子串结束
{
if(flag[i]==0)
{
strcpy(tmp,mapbuffer[i]); //将二维数组对应的[i][0]~[i][100]送给一维临时数组
flag[i]=1; //第一个标志位置1
strcpy(reducebuffer[countnum],mapbuffer[i]); //将mapbuffer二维数组对应的一维数组给二维数组reducebuffer对应的一维数组 对应的 ruduce
count[countnum]=1; //漏了一个t 传入的一位数组记录1
for(j=0;j<num;j++)
{
if(memcmp(tmp,mapbuffer[j],strlen(tmp))==0 && (strlen(tmp)==strlen(mapbuffer[j]))&& (flag[j]==0)) //漏了一个右括号
{//比较 tmp数组和mapbuffer对应一维数组前tmp字符长度位的长度 tmp数组长度与mapbuffer对应一维数组长度如果相等 且 记录位是0
count[countnum]++; //传入数组对应的 countnum 自加1 对应标志位显示 字符串存在的个数
flag[j]=1; //记录为标志为1
}
}
countnum++; //记数自加1 下一个记录位
}
}
return countnum; //返回记数
}