| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1999 人关注过本帖
标题:求思路求指导,计算一句句子中相同长度的英文单词的个数。
只看楼主 加入收藏
feng920917
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-11-29
结帖率:0
收藏
已结贴  问题点数:20 回复次数:8 
求思路求指导,计算一句句子中相同长度的英文单词的个数。
先用fopen()加载一个文档,然后scanf()将句子中的单词放入string[]当中
然后比如一句句子: a aa aa aaa aaa aaa aaaaaa aaaaaa.

理想输出为
长度为1的单词 (即a) 个数为1
长度为2的单词 (即aa) 个数为2
长度为3的单词 (即aaa) 个数为3
长度为4的单词 (即aaaa) 个数为0
长度为5的单词 (即aaaaaa) 个数为2

然后长度超过25的单词会跳出一个警告: error

请各位指导一二,给点参考思路,谢谢。
搜索更多相关主题的帖子: aaaaaa 
2012-11-29 05:57
StarFall
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:193
专家分:553
注 册:2012-10-1
收藏
得分:3 
回复 楼主 feng920917
我的思路是 一个一个字符读,不是空格的就累加一个数。,到空格的时候连一个switch语句,判断那个累加的数, 把句长为多少的情况加一。然后清0开始下一个词,最后输出各种句长的个数。 好像有点麻烦了

去追寻更高的技术领域。永不停止。
2012-11-29 06:20
feng920917
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-11-29
收藏
得分:0 
回复 2楼 StarFall
谢谢你的帮助,但是我有点不知道怎么计算好字母长度之后,再把相同长度的数量相加起来。
如果方便的话能敲一段代码给我吗?谢谢。
2012-11-29 06:41
核晴核理
Rank: 3Rank: 3
来 自:北京
等 级:论坛游侠
帖 子:129
专家分:169
注 册:2012-6-14
收藏
得分:3 
回复 3楼 feng920917
可以这么算;每算出一个单词的长度len,就string[len]++,最后直接for一下,输出string,就是你要的结果
程序代码:
#include<stdio.h>
#define OUT 0                          //在单词外
#define IN 1                           //在单词内
#define MAXWORD 25                     //最大字符个数
int main()
{
    int c,nc,i,state;
    int wl[MAXWORD];
    int outflow;                        //超出25个字符的单词个数
    state=OUT;                          //初始在单词外
    outflow=0;
    nc=0;
    for(i=1;i<MAXWORD;++i)              //将数组赋初值零
        wl[i]=0;
    while((c=getchar())!=EOF)           //开始输入单词
        if(c==' '||c=='\n'||c=='\t')
        {
            state=OUT;
            if(nc>0)                     //这段if else语句是你要的东西,怎么把相同字符数的单词个数加起来
                if(nc<MAXWORD)      
                    ++wl[nc];
                else ++outflow;
            nc=0;
        }
        else if(state==OUT)
        {
            state=IN;
            nc=1;
        }
        else ++nc;
    for(i=1;i<MAXWORD;++i)
    {
        printf("长度为%2d的单词有 - %3d个",i,wl[i]);
        printf("\n");
    }
    if(outflow>0)                                //超出25个字符的单词个数大于零的话输出个数
        printf("大于%d的数有%d个\n",MAXWORD,outflow);
    return 0;
}


[ 本帖最后由 核晴核理 于 2012-11-29 14:02 编辑 ]
2012-11-29 08:10
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
收藏
得分:3 
程序代码:
#include<stdio.h>
#include<string.h>
int i=0,j=0,k=0,l=0;//这里用来统计各个长度的单词的个数,我只写了3个,,你可以继续添加
void Tongji(int len)
{
    if(len==1)
    {
        i++;
    }
    else if(len==2)
    {
        j++;
    }
    else if(len==3)
    {
        k++;
    }
    else if(len>=4)
    {
        l++;
    }
}
int main()
{
    char string[30];
    int m=0;
    int len=0;
    //char *p;
    printf("Please input the string:\n");
    gets(string);
    while(string[m]!='\0')
    {
        while(string[m]<='z'&&string[m]>='a'||string[m]<='Z'&&string[m]>='A')
        {
            m++;
            len++;
        }
        //printf("%d\n",len);
        Tongji(len);
        if(string[m]==' ')
        {
            len=0;
            m++;
        }
        if(string[m]=='\0')
        {
            break;
        }
    }
    printf("长度为1的单词个数是:%d\n",i);
    printf("长度为2的单词个数是:%d\n",j);
    printf("长度为3的单词个数是:%d\n",k);
    printf("错误的的单词个数是:%d\n",l);
    return 0;
}
这是我试着写的,基本符合你的要求,但是貌似有点档次太低了啊

重要的不是结果,是求一个结果的过程,哪怕千难万难,当你有想要的结果时,你已走的很远
2012-11-29 10:58
Fisher~
Rank: 4
等 级:业余侠客
帖 子:93
专家分:222
注 册:2012-11-10
收藏
得分:3 
#include<stdio.h>

void main(void)
{
    char filename[50] = "F:/Projects/wenijan/wordnumber.txt";    //文件目录
    char ch = '0';
    int num = 0,i = -1;
    int count[25] = {0};                    // 记录单词个数
    FILE *fp;

    fp = fopen(filename,"r");
    ch = fgetc(fp);
    while (fp)
    {        
        if (ch == ' ' || ch == '\n')
        {
            count[num]++;
            num = 0;
        }
        else
            num++;
        if (num == 25)
        {
            printf("error\n");
            break;
        }   
        ch = fgetc(fp);
    }
    while (++i < 25)
        printf("长度为 %d的个数为%d:\n",i,count[i]);
    fclose(fp);
}
你直接把目录一换就行了,我简单写了一下目前待优化的问题是:
1.文件内容末尾必须是空格否则会读不出最后一个单词长度
2.每次都会输出error,这是因为fp指针会多读,fp指针运用不熟练暂时不会解决
2012-11-29 12:12
digku儿
Rank: 1
等 级:新手上路
帖 子:1
专家分:3
注 册:2012-11-29
收藏
得分:3 
你可以上迪酷网www.学习一下。里面有免费教程。
2012-11-29 15:11
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:3 
文件操作呀
不是字母的通通是一个单词的结束
用数组a[25]      下标表示长度count      下标对应的值表示 个数

在不是字母的分支里面初始是字母的分支里面的count的值就好了

我要成为嘿嘿的黑客,替天行道
2012-11-29 15:27
Fisher~
Rank: 4
等 级:业余侠客
帖 子:93
专家分:222
注 册:2012-11-10
收藏
得分:0 
程序代码:
#include<stdio.h>

void main(void)
{
    char filename[50] = "F:/Projects/wenijan/wordnumber.txt";    //文件目录
    char ch = '0';
    int num = 0,i = -1;
    int count[25] = {0};                    // 记录单词个数
    FILE *fp;

    fp = fopen(filename,"r");
    ch = fgetc(fp);
    while (!feof(fp))
    {       
        if (ch == ' ' || ch == '\n')
        {
            count[num]++;
            num = 0;
        }
        else
            num++;
        if (num == 25)
        {
            printf("error\n");
            break;
        }   
        ch = fgetc(fp);
    }
    while (++i < 25)
        if (count[i])
            printf("长度为 %d的个数为%d:\n",i,count[i]);
    fclose(fp);
}
改进了一下这次没问题了,如果符合了你的要求就结贴吧
2012-12-02 17:30
快速回复:求思路求指导,计算一句句子中相同长度的英文单词的个数。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021515 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved