黑马程序员技术交流社区
标题:
有没有好的解决方案
[打印本页]
作者:
郑亚鸽
时间:
2014-4-25 11:16
标题:
有没有好的解决方案
本帖最后由 郑亚鸽 于 2014-4-26 10:31 编辑
题目:在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同
单词。(C语言)
程序代码: #include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
int i,len = 0,maxlen = 0;
char s[1000],subs[100];
char *p,*q;
printf("请输入字符串:");
gets(s);
for(p=s;*p != '\0';p++)
{
if((*p != ' ')&&(*p != '\0'))
len++;
else{
if(len > maxlen)
{
maxlen = len;
q = p-len;
len = 0;
}
}
}
for(i = 0;i < maxlen;i++)
subs
= *(q+i);
subs[maxlen] = '\0';
printf("最长的英文单词是:%s\t,其长度是:%d\n",subs,maxlen);
}
这个程序可以编译通过,也可以执行,但是存在漏洞;
就是比如:输进去:a aa aaa aaaa 可以得到最长字符串的长度是4
但是输进去:i am writting to complaining about .得不到最长字符串的长度11。why?
作者:
z82454642
时间:
2014-4-25 12:47
本帖最后由 z82454642 于 2014-4-25 12:50 编辑
看2楼吧
作者:
Freedam
时间:
2014-4-25 14:01
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
int i,len = 0,maxlen = 0;
char s[1000],subs[100];
char *p,*q;
printf("请输入字符串:");
gets(s);
printf("%d",strlen(s));
for(p=s;*p != '\0';p++)
{
if(*p != ' ')
{
len++;
}
else{
if(len > maxlen)
{
maxlen = len;
q = p-len;
len = 0;
}
len = 0;//这个可以防止统计出来的单词字符数较小的情况下,len的值没被清0。
}
//这段加上可以防止最后一个单词是最大的时候被漏掉的情况。
if(*(p+1) == '\0')
{
if(len > maxlen)
{
maxlen = len;
q = p-len+1;
len = 0;
}
}
}
for(i = 0;i < maxlen;i++)
subs[i] = *(q+i);
subs[maxlen] = '\0';
printf("最长的英文单词是:%s\t,其长度是:%d\n",subs,maxlen);
}
复制代码
测试输入输出如下:
输入:
a aa aaa aaaa
输出:
最长的英文单词是:aaaa ,其长度是:4
输入:
最长的英文单词是:complaining ,其长度是:11
看看你要的是不是这样的效果,在单词间有空格的情况也测试过了,一般没有问题,但是,还是会有小bug的。因为现在只能在单词间输入空格可以统计正确,其他情况就自己加上if判断条件吧。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2