修仙界扛把子 2019-04-29 10:08 采纳率: 0%
浏览 139

文件解密综合应用c++编程

“d:\3.txt”中存放的是一篇单词个数不超过2000个的英文文章,单词之间的分隔符可以是:空格符、换行符、逗号、句号、引号、冒号、感叹号,要求编写程序对整篇文章中的单词进行统计,统计出每一单词在文章中出现的次数,将统计结果保存在以“result.txt”命名的文件中,存放在D盘根目录下。
提示:用char a[2000][20]存放取出的单词,每行为一个单词,int b[2000]用来记录各个单词的重复次数。(最好程序有解释说明)

补全此程序

#include
#include
#include

#define FLAG_IN 1 //在一个单词的内部标志
#define FLAG_OUT 0 //在一个单词的外部标志
char a[2000][20];
int b[2000]; //数组a记录无重复的单词,每行一个,数组b记录单词的重复次数
int k; //记录有效的单词个数

int check(int n,char d[]){ //以数组d(字符串)与数组a中的前n个元素比较,若已存在,则在相应的数组b自增1,返回1,否则返回0
int i;
for(i=0;i<n;i++){
if(strcmp(d,a[i])==0){
b[i]++;
return 1; //d[]已存在
}
}
return 0; //d[]不存在
}

int countword(){
char ch,d[20]; //数组d记录当前正在读入的单词
int nw,p=0,state; //nw统计单词总数(带重复),p跟踪单词的长度
FILE *fp;

state=FLAG_OUT;
nw=0;
if((fp=fopen("d:\\3.txt","r"))==NULL){
    printf("打开文件失败!\n");
    exit(0);
}
while(!feof(fp)){
    ch=fgetc(fp);
    if(ch==' ' || ch=='\n' || ch==',' || ch=='.' || ch==':' || ch=='"'  || ch=='!'){
        state=FLAG_OUT;
        nw++;
        d[p]='\0';
        //printf("%s\n",d);


        p=0;
    }
    else if(state==FLAG_OUT){
        d[p]=ch;
        p++;
        state=FLAG_IN;
    }
    else if(state==FLAG_IN){
        d[p]=ch;
        p++;
    }

}
fclose(fp);
return nw;

}
void main(){
int i,n;
k=0;
for(i=0;i<2000;i++)
b[i]=0;
n=countword();
printf("n=%d\n",n);
}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-20 21:19
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?