| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1215 人关注过本帖
标题:找出最长的单词,并输出其长度
只看楼主 加入收藏
JACKITE
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-11-8
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:20 
找出最长的单词,并输出其长度
#include <stdio.h>
int main()
{
    void add(char b[]);
    char a[50];
    gets(a);
    add(a);
    return 0;}
void add(char b[])
{
    int m=0;
    void bbb(int,int);
    for(int i=0;b[i]!='\0';i++)
    {
        if('A'<=b[i]&&b[i]<='Z')
            m++;
        else if('a'<=b[i]&&b[i]<='z')
            m++;
        else if(b[i+1]=='\0')
            bbb(i,m);
        else bbb(i,m);
}}
void bbb (int k,int l)
{
 static int c=0,d=0;
    if(d<l)
    {
        d=l;c=k;}
    else ;
    extern a[50];
    if(a[k+1]=='\0')
    {
        printf("最长的单词是:");
        for(int j=c-d;j<=c;j++)
        {printf("%c",a[j]);}        
        printf("最长单词的长度是%d",d);
}}  编译时没错误
    但执行时出现:  qw.obj : error LNK2001: unresolved external symbol "int * a" (?a@@3PAHA)
Debug/aasasasasas.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.(请问错在哪了?)
搜索更多相关主题的帖子: include return 单词 
2014-12-20 18:56
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
乱就一个字
楼主还是把题目要求说出来吧
看代码真心不懂

Only the Code Tells the Truth             K.I.S.S
2014-12-20 21:02
JACKITE
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-11-8
收藏
得分:0 
好吧! 题目是:编写函数,输入一行字符,将此字符串中最长的单词输出, 同时输出其长度。
2014-12-20 21:20
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
所谓的一行字符和单词
其中的单词是以什么来分隔的
是空格么?

Only the Code Tells the Truth             K.I.S.S
2014-12-20 21:43
JACKITE
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-11-8
收藏
得分:0 
不是空格,只要不是英文大小写字母都视为空格
2014-12-20 21:47
JACKITE
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-11-8
收藏
得分:0 
第二的“空格”是间隔...打错了
2014-12-20 21:48
ouyangshit
Rank: 3Rank: 3
来 自:China
等 级:论坛游侠
帖 子:155
专家分:107
注 册:2014-10-25
收藏
得分:3 
程序代码:
/*找出最长单词并输出其长度,非字母视为间隔符*/
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main()
{
    char ch,oldch=' ',str[80],max[80];
    int len,maxlen=0;
    while(oldch!='\n'){
        len=0;
        for(ch=getchar();isalpha(ch);ch=getchar())
            str[len]=ch,len++;
        str[len]=0;
        oldch=ch;
        if(len>maxlen){
            maxlen=len;
            strcpy(max,str);
        }
    }
    puts(max);
    printf("maxlen=%d\n",maxlen);
    return 0;
}

试试,能改善吗,求指点。
2014-12-20 22:22
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
回复 7楼 ouyangshit
fsdf abcd fsd 123#bcde
fsdf
maxlen=4

只找到第一个

Only the Code Tells the Truth             K.I.S.S
2014-12-20 23:25
ouyangshit
Rank: 3Rank: 3
来 自:China
等 级:论坛游侠
帖 子:155
专家分:107
注 册:2014-10-25
收藏
得分:0 
回复 8楼 longwu9t
似乎我的方法不满足多条最大单词,你有解决方案吗?
2014-12-21 09:58
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:7 
一锅意大利面 懒得再写函数了
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void splitWord(char *p) {
    int i = 0, LEN = strlen(p);

    for(i = 0; i < LEN; i++) {
        if((*(p + i) < 'A' || *(p + i) > 'z') || ((*(p + i) > 'Z' && *(p + i) < 'a'))) {
            *(p + i) = '\n';
        }
    }
}

char *cutspace(char *p) {
    int i = 0, j = 0, LEN = strlen(p);

    for(i = 0; i < LEN; i++) {
        if(*(p + i) != '\n') {
            p += i;
            break;
        }
    }

    for(j = LEN - 1 - i; j > 0; j--) {
        if(*(p + j) != '\n') {
            *(p + j + 1) = '\0';
            break;
        }
    }

    return p;
}

int main(void) {
    struct wordclac {
        char word[80];
        int len;
    };
    struct wordclac warr[80];
    int i = 0, flag = 0, line = 0, lenmax = 0;
    char c, *input, *pstr, *filename = "strdata.txt", *filetmp = "strtmp.txt";
    FILE *fp, *ftp;
    input = (char *)malloc(sizeof(char));

    if(input != NULL) {
        while((input[i] = getchar()) != '\n') {
            input = (char *)realloc(input, (i + 2) * sizeof(char));

            if(input != NULL)
                i++;

            else {
                printf("ERROR!\n");
                exit(1);
            }
        }

        input[i] = '\0';

    } else {
        printf("ERROR!\n");
        exit(1);
    }

    splitWord(input);
    pstr = cutspace(input);
    fp = fopen(filename, "w+");
    fwrite(pstr, sizeof(char), strlen(pstr), fp);
    rewind(fp);
    ftp = fopen(filetmp, "w+");

    while((c = fgetc(fp)) != EOF) {
        if(c == '\n' && !flag) {
            continue;

        } else if(c == '\n' && flag) {
            flag = 0;
            fputc(c, ftp);

        } else {
            fputc(c, ftp);
            flag = 1;
        }
    }

    rewind(ftp);

    while((c = fgetc(ftp)) != EOF) {
        if(c == '\n') {
            line++;
        }
    }

    rewind(ftp);

    for(i = 0; i <= line; i++) {
        fscanf(ftp, "%[^\n]", warr[i].word);
        fgetc(ftp);
        warr[i].len = strlen(warr[i].word);
        printf("%s\t", warr[i].word);
        printf("%d\n", warr[i].len);
    }

    for(i = 0; i <= line; i++) {
        if(warr[i].len > lenmax) {
            lenmax = warr[i].len;
        }
    }

    printf("最大字符串长度: %d\n", lenmax);

    for(i = 0; i <= line; i++) {
        if(warr[i].len == lenmax) {
            printf("%s\n", warr[i].word);
        }
    }

    fclose(fp);
    fclose(ftp);
    free(input);
    return 0;
}


[ 本帖最后由 longwu9t 于 2014-12-21 23:02 编辑 ]

Only the Code Tells the Truth             K.I.S.S
2014-12-21 16:21
快速回复:找出最长的单词,并输出其长度
数据加载中...
 
   



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

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