回 帖 发 新 帖 刷新版面

主题:输出一句话中最长的单词.

输出一句话中最长的单词.
#include<stdio.h>
#include<string.h>
void fun(char str1[100])
{
int i=0,j=0;
char word0[15],word1[15];
word0[0]='a';
for(;str1[i]!='\0';i++)
{
   if(!(str1[i]>=97&&str1[i]<=122||str1[i]>=65&&str1[i]<=90))
   {
    if(strlen(word0)<strlen(word1))
       strcpy(word0,word1);
    j=0;
   }
   else
   {
    word1[j]=str1[i];
    j++;
   }
}
word0[j]='\0';
printf("最长的单词为:");
puts(word0);
}

void main()
{
char str0[100];
gets(str0);
fun(str0);
}
输出一句话中最长的单词.
麻烦各位看看吧.总是有问题.

[em6]

回复列表 (共2个回复)

沙发

这段代码的错误主要在fun函数中,整个fun函数好象有点乱:
  1. word0,word1都没有初始化,并且没有给它们赋'\0'值,因此strlen strcpy会有问题
  2. if语句如果不是很明显的只有一条语句,最好加上花括号。
     if(strlen(word0)<strlen(word1))这里可能是掉了花括号。

  可以参考下面的代码(可能有错误):
#include <ctype.h>
#include <stdlio.h>

void fun2 (const char *str)
{
  const char *s, *e;     // 目前最长单词的起始位置 结束位置
  const char *ps, *pe;   // 当前    单词的起始位置 结束位置

#define gotoWordStart(str) for(;(*str!='\0') && !(isalpha(*str)); ++str)
#define gotoWordEnd(str)   for(;isalpha(*str); ++str)
#define wordStart(ps,str)  do{ gotoWordStart(str); ps=str; } while (0)
#define wordEnd(pe,str)    do{ gotoWordEnd  (str); pe=str; } while (0)
#define aWord(ps,pe,str)   do{ wordStart(ps,str); wordEnd(pe,str); } while (0)

  for (s = e = str; ;)
    {
      aWord (ps, pe, str);

      if (pe-ps > e-s)
        e=pe, s=ps;
      else if (pe == ps)  // 这里是说明str已经空字符'\0'
        break;
    }
  
  if (s == e)
    puts ("输入句子中没有单词");
  else
    // 从目前最长单词起始位置开始,一共输出e-s个字符
    printf ("最长的单词为'%.*s'", (int)(e-s), s); 
}

板凳

[quote]这段代码的错误主要在fun函数中,整个fun函数好象有点乱:
  1. word0,word1都没有初始化,并且没有给它们赋'\0'值,因此strlen strcpy会有问题
  2. if语句如果不是很明显的只有一条语句,最好加上花括号。
     if(strlen(word0)<strlen(word1))这里可能是掉了花括号。
}[/quote]
回来看看。。windy0will兄依旧V5.。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册