题目很简单是,就是
输入一行字符,将字符串中最长的单词输出
用
fun()
{......}
main()
{......}
格式,给个提示。
题目很简单是,就是
输入一行字符,将字符串中最长的单词输出
用
fun()
{......}
main()
{......}
格式,给个提示。
这一句如何实现?
每输入一个字母就判断是不是一个新单词了
[此贴子已经被作者于2004-11-06 21:31:10编辑过]
很简单啊!!如果下一个不是字母那么单词结束!!如果是的那么继续!!如果现在还不是单词开始那么当遇到字母时单词开始!!
要判断是不是单词必须有个单词库,进行比较;
要不就在在输入时做上记号 比如前后加个空格 或前后加数字等
我想你说的是第二种吧??如果第二种的话 你就直接用定义进行判断;
如果是第一种的话 那就麻烦了~~~~
分而治之:
1。判断是不是一个真正的单词,而不是几个任意字母的组合,就需要一个单词库用作比较。
2。判断是不是最长,最简单的只需两个指针来定位就行了。
# include <stdlib.h> # include <stdio.h>
# define LEN sizeof(char)
struct word { char c ; struct word*next ; };
int Decide(char c) { if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) { return 1 ; } else { return 0 ; } }
int Long(struct word*p) { int longest=0,len=1,door=1,sgin=0,teep,i=0 ; while(p!=NULL) { if(Decide(p->c)) if(door) { teep=i ; door=0 ; } else { len++; } else { door=1 ; if(len>=longest) { longest=len ; sgin=teep ; len=0 ; } } i++;
p = p->next; } return(sgin); }
main() { struct word*p_all,*p_fun,*head,*p_print ; char c ; int i=0,n ; head=p_all=(struct word*)malloc(LEN); do { c=getchar(); p_all->c=c ; p_fun=p_all ; p_all=(struct word*)malloc(LEN); p_fun->next=p_all ; }while(c!='\n');
p_fun->next=NULL ; p_print=head ; n=Long(head); while(p_print!=NULL) { i++; while(i>=n&&Decide(p_print->c)) { printf("%c",p_print->c);
p_print = p_print->next;
if (!Decide(p_print->c))
goto end; }
p_print = p_print->next; } end: getch(); }
用的是第二种理解
数组做好点 我主要是为了加强我对链表的操作能力 仅供参考~~~
#include<stdio.h>
#include<string.h>
void fun(char *p)
{char *q,*s;int i,j,k,index=0,len=0;
for(i=0;i<strlen(p);i++)
{j=0;k=i;
if (p[k]!=' ') do {j++;k++;}
while(p[k]!=' ');
if(j>len) index=i;
i=k;
}
printf("The word is:");
for(i=index;p[i]!=' ';i++)
printf("%c",p[i]);
printf("\n");
}
void main()
{ char a[100];
printf("Input a string:");
gets(a);
fun(a);
getch();
}
没运行......