| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 933 人关注过本帖
标题:C语言的一个练习,大家看看怎么做,我的怎么不对
只看楼主 加入收藏
yuanshen316
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-7-26
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:11 
C语言的一个练习,大家看看怎么做,我的怎么不对
写一个能够在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词
#include <stdio.h>
#include <string.h>
char con[];
void longth(char s[],long len)
{
    char con1[]="\0";
    for (int i = 0; i<len; i++)
    {
        if(s[i]=='\0')
        {
            for (int a  = (0+strlen(con)); a<i; a++)
            {
                con[a] = s[a];
            }
            if (strlen(con)>=strlen(con1))
            {
                for (int i = 0; i<strlen(con); i++)
                {
                    con1[i] = con[i];
                }
            }
        }
    }
    for (int i = 0; i<strlen(con1); i++)
    {
        printf("最长的单词是:%c",con1[i]);
    }
}
int main()
{
    char arr[] = "how are you skuxhe";
    long len = strlen(arr);
    longth(arr, len);
}
我只能说我感觉我的想法是对的,就是不知道怎么不对,求高手解答
搜索更多相关主题的帖子: 单词 include C语言 字符串 
2012-07-30 19:47
godfathermf
Rank: 1
等 级:新手上路
帖 子:6
专家分:4
注 册:2012-7-30
收藏
得分:0 
把所有循环里面int***, 写到各个函数的开头
2012-07-30 21:00
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
if(s[i]=='\0')
{
}

给我解释你为什么加这个条件。

重剑无锋,大巧不工
2012-07-30 21:32
yuanshen316
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-7-26
收藏
得分:0 
回复 3楼 beyondyf
主要是说当遇到空格的时候说明之前的是一个单词,然后我记得'\0'好像是表示空格
2012-07-30 22:09
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:2 
编程不是靠猜的。我都懒得骂你了。下面的代码能看懂多少算多少。算是我给论坛做的一点贡献吧。不知道十年八年后我看到自己的代码会作何感想。

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

char * longest_word(const char * str, char * word)
{
    int len, wf, wn, i, j;
    len = strlen(str);
    for(wf = wn = i = 0; i < len; i++)
    {
        if(isblank(str[i])) continue;
        for(j = i + 1; j < len && !isblank(str[j]); j++);
        if(j - i > wn)
        {
            wf = i;
            wn = j - i;
        }
        i = j;
    }
    for(i = 0; i < wn; i++) word[i] = str[i + wf];
    word[wn] = '\0';
    return word;
}

int main()
{
    char arr[] = "how are you skuxhe";
    printf("%s\n", longest_word(arr, arr));
    return 0;
}

重剑无锋,大巧不工
2012-07-30 22:26
tianlang358
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-7-30
收藏
得分:0 
新手路过,受教了~
2012-07-30 23:57
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
for(j = i + 1; j < len && !isblank(str[j]); j++);
  for(i = 0; i < wn; i++) word[i] = str[i + wf];
目前对字符串处理这块还没学到,但 这两句是不是有问题? for 后面 是一个空循环!
2012-07-31 11:37
yuanshen316
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-7-26
收藏
得分:0 
回复 5楼 beyondyf
不好意思,现在还没有学指针,请问用函数怎么解决这个问题
2012-07-31 12:22
beyondakun
Rank: 1
等 级:新手上路
帖 子:2
专家分:5
注 册:2012-7-31
收藏
得分:5 
回复 8楼 yuanshen316
程序代码:
#include<stdio.h>
#include<string.h>
#include<ctype.h>
char word[200];

void longest_word(char str[], char word[])
{
    int len, wf, wn, i, j;
    len = strlen(str);
    for(wf = wn = i = 0; i < len; i++)
    {
    if(isblank(str[i])) continue;
        for(j = i + 1; j < len && !isblank(str[j]); j++);
        if(j - i > wn)
        {
        wf = i;
            wn = j - i;
        }
        i = j;
    }
    for(i = 0; i < wn; i++) word[i] = str[i + wf];
    word[wn] = '\0';
    return;
}

int main()
{
    char arr[] = "       asdfsdfsdfd you skuxhe   1234567890abcdefghijklmnopqrstuvwxzy  ";
    longest_word(arr,word);
    puts(word);
    return 0;
}

我也是新手,刚学到指针,把上面beyondyf的代码改了下你看看中不中。
2012-07-31 13:32
a745043791
Rank: 4
等 级:业余侠客
帖 子:95
专家分:260
注 册:2012-2-12
收藏
得分:3 
跟你说我的思路:先查找字符串中所有‘ ’的位置,把他们的位置依次存储到一个数组(第一个元素为-1,最后一个为‘0’的位置)中,找出字符串各相邻元素的最大差,这个差-1即为最长单词长度,在依次输出这两个位置间的字符。代码如下(可能有些粗糙)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int k[2];
void lon(char a[]);
void lon(char a[])
{int n=strlen(a);
int *m=(int*)malloc(sizeof(int)*n);
int l=0;
for(int i=0;i<n;i++)
{
    if (a[i]==' ')
    {
        m[l]=i;l++;
    }

}
m[l]=n+1;
int x=m[0];k[0]=-1;k[1]=m[0];
for (int q=1;q<=l;q++)
{
    if(x < (m[q]-m[q-1]-1) )
x=m[q]-m[q-1]-1;
k[0]=m[q-1];
k[1]=m[q];
}

}
void main()
{char str[100];
gets(str);
lon(str);
int i=k[1]-k[0]-1;
for(int p=k[0]+1;p<k[1];p++)
putchar(str[p]);

}
2012-07-31 13:40
快速回复:C语言的一个练习,大家看看怎么做,我的怎么不对
数据加载中...
 
   



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

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