| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 339 人关注过本帖
标题:能帮我看看哪里出错吗?
只看楼主 加入收藏
dtxwz
Rank: 2
等 级:论坛游民
帖 子:79
专家分:45
注 册:2011-9-18
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
能帮我看看哪里出错吗?
录入一篇英文文章(存放在字符数组a[n]中),统计单词个数,并按照单词的长度由小到大依次输出各个单词。假定这段文章不超过80个字符,单词不超过20个。
#include<stdio.h>
#define N 80
void sort(int b[20][2],int c)   //给英文单词长度排序
{
    int i,j,k,z;
    int t[2];
    for(i = 0;i < c-1;i++)
    {
        k = i;
        for(j = i+1;j < c;j++)
        {
            if(b[k][0] > b[j][0])
                k = j;
        }
        if(k!=i)
        {
            for(z = 0;z < 2;z++)
            {
                t[z] = b[i][z];
                b[i][z] = b[k][z];
                b[k][z] = t[z];
            }
        }

    }
}
int main()
{
    int flag = 0,j = 0,z = 0,i = 0,y;
    char a[80];
    int b[20][2];
    printf("请输入英文文章:\n");
    gets(a);

    while(a[i] != '\0')                                      //
    {
        if(a[i] >= 'a' && a[i] <= 'z' || a[i] >= 'A' && a[i] <= 'Z')
            flag++;
        else
        {
            b[z++][0] = flag;                            //b[][0]为单词数
            
            flag = 0;
        }
        if(flag == 1)
        {
            j++;
            b[z++][1] = i;                               //b[][1]为单词起始位置
        }
        i++;
    }

        sort(b,j);
    for(y = 0;y < j;y++)
    {
        for(z = 0;z < b[y][0];z++)
        printf("%c",a[b[y][1]+z]);
        printf("\n");
    }
    printf("%d\n",j);

    return 0;
}
搜索更多相关主题的帖子: 英文单词 英文文章 include 统计 
2015-11-17 20:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:20 
文章不超过80个字符 --- 难道你不应该开81个元素的数组吗?你用的是 char a[80];
while(a[i] != '\0') 那段变量太多了,我看得眼花

程序代码:
#include <stdio.h>
#include <stdlib.h>

#define TEXTMAXLEN 80
#define WORDMAXCNT 20

int compare( const void* a, const void* b )
{
    return *(int*)a - *(int*)b;
}

int main( void )
{
    // 录入文章
    char str[TEXTMAXLEN+1] = "a ab abc ab a";

    // 取出单词
    int pos[WORDMAXCNT][2]; // {单词长度, 单词开始位置}
    int pos_cnt = 0;
    for( int i=0,a,b; b=0, sscanf(str+i," %n%*s%n",&a,&b), b!=0; i+=b, ++pos_cnt )
    {
        pos[pos_cnt][0] = b-a;
        pos[pos_cnt][1] = i+a;
    }

    // 根据单词长度排序
    qsort( pos, pos_cnt, sizeof(pos[0]), &compare );

    // 输出单词
    for( int i=0; i!=pos_cnt; ++i )
        printf( "%.*s\n", pos[i][0], str+pos[i][1] );

    return 0;
}


2015-11-18 09:13
快速回复:能帮我看看哪里出错吗?
数据加载中...
 
   



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

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