问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言 统计文件中各个单词的个数

发布网友 发布时间:2022-10-30 06:36

我来回答

3个回答

热心网友 时间:2023-10-10 21:51

你的程序只需要修改两处就行了:(1.)不能用指针数组直接存放字符串,即,要把程序开头的char *s2[30]改为char s2[30][30],用二维数组来存放多个字符串;(2.)你的想法是,如果单词不是重复的单词,就将它存入s2,但这时不能用“=”,应该用strcpy()函数,即,原程序中的s2[k]=s3应改为strcpy(s2[k],s3),改过后的代码如下:
#include<stdio.h>
#include<string.h>

int main()
{
char str[100],ch;
char s2[30][30]; /*s2存放单词(不重复),修改处*/
char s3[30],*p=s3;
int i,j,k=0,flag1,flag2,count1=0,white=1,a[30]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
FILE *file;
file=fopen("string.txt","w+");
printf("Input a string of English:\n");
gets(str);
fputs(str,file);

rewind(file);
while((ch=fgetc(file))!='0') /*统计文件中有多少个单词*/
{
if((ch==' ')||(ch=='\t')||(ch=='\n'))
white++;
else
{
if(white)
{
white=0;
count1++;
}
}
}

rewind(file);
for(i=0;i<count1;i++)
{
flag1=0; /*是否有重复单词*/
flag2=0; /*是否遇到空白字符*/
p=s3;
while(ch=fgetc(file))
{
if((ch!=' ')&&(ch!='\t')&&(ch!='0'))
{
if((ch>64)&&(ch<91)) /*大写字母变小写*/
{
ch=ch+32;
}
*p++=ch;
}
else
{
flag2=1; /*遇到空白字符*/
*p='\0';
for(j=0;j<k;j++) /*k为s2中的单词个数*/
{
if(strcmp(s3,s2[j])==0)
{
flag1=1; /*有重复单词*/
a[j]++;
break;
}
}
if(flag1==0) /*如果单词不重复*/
{
strcpy(s2[k],s3); /*修改处*/
a[k]++;
k++;
}
}
if(flag2==1) /*如果遇到空白字符,则开始查询下一单词,跳出while循环*/
{
break;
}
}
while(((ch=fgetc(file))==' ')||(ch=='\t')); /*吞掉多余的空白字符*/
fseek(file,-1,1); /*后退一格,继续读*/
}
for(i=0;i<k;i++)
{
printf("%s\t",s2[i]);
}
printf("\n");
for(i=0;i<k;i++)
{
printf("%d\t",a[i]);
}
printf("\n");
fclose(file);
return 0;
}

明白了吗?

热心网友 时间:2023-10-10 21:51

我只是把int main改为void main了,调试是可以运行的 啊追问可以运行,但结果是错的,我想把不重复的单词放入指针数组s2中,但结果只输出最后一个单词。

追答那是算法了,我*为力了,我只是改错哈,主要是看别人的代码有点不习惯,相信你再看一遍代码,修改下算法肯定可以的啊!

热心网友 时间:2023-10-10 21:52

/************************************************

************************************************/

#include <stdio.h>
#include <malloc.h>
#include <string.h>

#define WORDLEN 30
int BuildDictionary(char*[]);
void FindWord(char *, int[],char *s2[], int len);
char JudgeWord(char);

void main()
{
char *s2[WORDLEN], line[100];
char word[WORDLEN], *p;
int i, len,lenword, how[WORDLEN];

for (i=0; i<WORDLEN; i++){
s2[i] = (char *)malloc(WORDLEN);
}
memset(how, 0, sizeof(how));
//构建词典,从文件读入,必须每个单词用空格隔开且小写
lenword = BuildDictionary(s2);
printf("词典已读入,请输入字符串:");
//输出一串字符,回车结束
gets(line);
FindWord(line, how, s2, lenword);
//输出单词统计结果
for (i=0;i<WORDLEN;i++)
if(how[i])printf("%-10s ",s2[i]);
printf("\n");
for (i=0;i<WORDLEN;i++)
if(how[i])printf("%-10d ",how[i]);
printf("\n");
}

int BuildDictionary(char*p[])
{
FILE *fp;
int i = 0;

if((fp=fopen("dic.txt","r"))==NULL){
printf("Open dic.txt file Err\n");
return 0;
}
while (fscanf(fp, "%s", p[i]) != EOF){
i++;
if(i>=WORDLEN)break;
}
return i;
}
/************************************************/

void FindWord(char *p,int how[], char *s2[], int len)
{
int i = 0, j;
char c, WORD[WORDLEN];

while (*p)
{
if(JudgeWord(*p)!='#')
{
i = 0;
while (*p)
{
if ((c=JudgeWord(*p)) != '#'){
WORD[i++]=c;p++;
}
else
break;
}
WORD[i]='\0';
for (j=0; j<len;j++)
{
if(strcmp(s2[j], WORD) == 0){
how[j]++; break;
}
}
}
p++;
}
}

/************************************************/
char JudgeWord(char c){
if(c>='A'&&c<='Z')
return c+32;
else if(c>='a' && c<='z')
return c;
else
return '#';
}

/************************************************
结果测试:
词典已读入,请输入字符串:Twinkle twinkle little star 000
twinkle little star
2 1 1

************************************************/
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
粒上皇开口熟栗120g*5袋(共600g)-详细介绍 三皇王板栗介绍 品牌榜:2024年板栗十大品牌排行榜 投票结果公布【新】 为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 C语言统计该文本中 英语单词的个数 ? 求教:南京哪里做的芝士蛋糕好吃 南京哪家芝士蛋糕最好吃? AMDRadeonRX7900XTX拥有24GB显存,实际表现怎样? 17.我学习光电耦合器,请问什么是CTR ctr值超出范围什么原因? 微信支付冻结名下微信也会永远冻嘛- 问一问 被封会封多久,要是一直没有解封会被注销吗? 吃一顿烤肉得快走多少公里不能胖 iphone图标怎么变小 牛津国际幼儿园学费 我 在萧山衙前 口头谈好一个体育彩票店转让,以付5000元押金,后来体彩名字不能过户,就不想转了,想退押 iqoo手机怎么把图标设置成白色 电冰箱里面的温度,是6冷还是1冷?? 难忘的一幕话题作文 扬的组词 扬的组词及解释 土豆宽粉凉拌怎么做简单 东北风味的凉拌土豆宽粉做法教程 求2022年最火微信头像最火一刻相册资源~跪求!谢谢!!! 狗突然特别能吃 狗为什么这么能吃 C语言 统计文件中单词的个数,并将单词依次输出到屏幕 c语言,统计文件里的单词数 工业上是利用氮气和氧气什么的不同,采用什么方法制取大量氧气。工业制取氧气主要发生什么变化? 老子的常用名言警句 政府产业基金的成立流程_法师兄 基金子公司成立条件有哪些_法师兄 广州市有保姆培训班吗?在哪个区? 番禺有哪些社区在培训家政服务员? 王者荣耀忘记充能了怎么办 求助大家,闲鱼买到假货怎么办 “苍虬垂髯猛虎卧”出自哪一首诗词?拜托各位了 3Q 有句古文。恰如猛虎卧什么什么的。大概忍辱负重的意思。这句话谁能告诉我?还有出自哪里? 英雄志里的少时曾攻经史,长成亦有权谋。恰似猛虎卧荒丘,潜伏爪牙忍受全文是什么? xbox360蓝龙游戏问题 蓝龙打到荒野西部还是东部有个大熊怎么打过,还有个绿巨龙也打不过,请高手帮忙谢谢 DC罗德岛战记 邪神降临,收集30个魔神勋章,老太太召唤的绿色巨龙,听说有个GUB可以刷装备?怎么 地牢猎手无尽地牢挑战的元素掉什么材料 高中毕业典礼开场白简短 电脑一开机cpu使用90多,接着cp u过热警报马上自动关机,前后就2分钟? 公司法人年龄不能超过多少岁 公司法人代表有年龄限制吗?