输入任意一个英文句子,输出最长单词。
求大神解答 谢谢! 怎么破 呜呜呜急急:cry 1.建立一个足够放下句子的字符串。例如char;按照实际情况来确定数组的大小。2.然后将输入的句子保存到字符串中。
3.开始寻找最长单词:
1)定义一个临时字符串,用于记录单词。
2)再定义一个用于记录最长单词的字符串。
3)开始从英文句子中分离单词,如果遇到非字母结尾的都是一个单词。
4)然后记录该单词的长度,并把单词保存到最长单词字符串中。
5)以此类推,每次遇到比当前字符串长的单词时都要重新保存最长单词字符串。
4.这就是最普通的思路了,按照这个写吧,代码不提供了,编程重要的就是思想,至于如何实现,这是看你基本功的时候了,想学好编程就要自己多写,自己写出来的才能体会到正真的快乐。 那个单词之间不可以有那空格,例如:aaabbcccc,输出的是cccc 不会高深的,不过应该可以通过判断空格来记录单词长度,最后比较一下就是了。多动手。。。 如果没有空格做分隔符的话,计算机是没有那么智能的,它怎么会认识哪个是真正的单词呢,一般的方法如下:1. 用strtok函数把这句英文中的单词按" "来分隔(因为一般英文句子中都是以空格来分开每个单词的).
2. 然后遍历找出来的单词,得到最长单词的长度是多少.
3. 最后再去遍历一次这些单词,把长度等于最长长度的单词打印出来. er88438 发表于 2013-12-31 09:50 static/image/common/back.gif
那个单词之间不可以有那空格,例如:aaabbcccc,输出的是cccc
楼主的意思是说 输入:myworld,输出的是world ?
这样的话,很难实现的,因为没有空格识别起来会产生很多歧义的。。。。
比如TODO,可以认为是TODO的意思,也可以理解为to do 呵呵,不带空格的英文句子还叫句子吗?这已经涉及到自然语言的处理了,人家的英文分词还是要根据句子的空格来的。
如果不带空格,那先得划分句子,即使有词典,但也难以解决识别比如his和history的问题。所以楼主这蛋疼的问题别再问了,几乎是不可能完成的任务 er88438 发表于 2013-12-31 09:50 static/image/common/back.gif
那个单词之间不可以有那空格,例如:aaabbcccc,输出的是cccc
有空格是分分钟的事,不带空格是一大难题 带空格还不好办啊 一句话能有几个单词大不了排下序呗 每空格的话╭(╯^╰)╮不会{:5_100:} 办法有,先建一个英语单词词典,后比对输入的字符,就是了。:lol: 本帖最后由 结束点№ 于 2014-1-5 20:06 编辑
需要字库对比的吧.. 输入一系列字母字符串,截取第一个字符,开始向后取第二个字符,组成新的字符串,对比字库:
1)字库包含有,则继续取第三个字符组成新的字符串,继续对比字库,如果字库包含有,则继续取一系列字母字符串第四个字符组成新的字符串,直到没有,记录该新的字符串的长度和内容,存放进变量中
2)字库中没有,则从一系列字母字符串取第二个字符,从第二个字符又向后取字符,组成新的字符串,重复1)..
最后从保存的变量中遍历出长度最大的值,应该就是你需要的了吧
需求的英文单词字库 应该很庞大才对..
找2个空格之间最长的距离,就是最长的单词
从串首到第一个空格的长度 放入变量1
第一个空格到第二个空格的距离放入变量2,比较变量1和2 哪个大留哪个放变量1里面
第二个空格到第三个空格的距离放入变量2,比较变量1和2 哪个大留哪个放变量1里面
....................
就能达到要求
本帖最后由 五号智能 于 2014-1-9 03:38 编辑
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
vector <string> a;
string b;
cout<<"请输入语句,按Ctrl+Z结束"<<endl;
while(cin>>b)
{
a.push_back(b);
}
size_t t=0;
size_t big;
for(size_t i=0; i<a.size(); i++)
{
if (t<a.size())
{
t=a.size();
big=i;
}
}
cout << a<<endl;
system("pause");
}
这里怎么都是钻死牛角的人呢,正常人打语句,单词间那有不留空格的.#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
vector <string> a;
string b;
size_t t=0;
size_t big;
size_t i=0;
cout<<"请输入语句,按Ctrl+Z结束"<<endl;
while(cin>>b)
{
a.push_back(b);
if (t<a.size())
{
t=a.size();
big=i;
}
i++;
}
cout << a<<endl;
system("pause");
} //优化了一下.随便提一句,这网页里的代码段有问题,不自动排版.
不要忘结贴啊,我还等着升级呢 这是当初我学小强那本书的一道题,看看吧
#include<stdio.h>
int i,j,n=0,m=0,max,x1=0,y1=0;
char str1,aa;
int str2;
int main()
{
printf("输入字符以空格结尾\n非字母算作空格\n");
gets(aa);
for( i=0;(aa)!='\0';i++)
{
if(((aa>=1)&&(aa<=64))
||((aa>=91)&&(aa<96))
||((aa>=123)&&(aa<=255)))
{
if(i==0) goto jump;//首字符为空格跳出
if(((aa>=65)&&(aa<=90))
||((aa>=97)&&(aa<=122)))//连续按空格无效
{
if(n>=max)
{
max=n;//单词最大长度
}
n=0;m++;
}
}
jump: ;
if(((aa>=65)&&(aa<=90))
||((aa>=97)&&(aa<=122)))
{
str1=aa; //将单词赋给新数组
n++; //没按下一个非空格加一
str2=n; //定义新数组储存每个单词长度
}
}
for(j=0; j<m; j++)
{ if(str2==max)//找到第几个单词长度=最长
printf("最长单词\t%s\n长度\t%d\n位置:第%d个\n\n",
str1,max,j+1);
}
} {:1_1:} 去查查msdn的库函数看看 #include
using
namespace
std;
const
int
max
=
20;
int
main()
{
unsigned
int
maxlen
=
0;
int
len
=
0;
int
i=0;
string
str;
cout
<<
"请输入一段字符串(ctrl+z)完成输入:\n";
getline(cin,str,'
');
while
(cin)
{
if
(maxlen
<
str.size())
{
maxlen
=
str.size();
len
=
i;
}
++i;
getline(cin,str,'
');
}
cout
<<
"最长字符串味:\n";
cout
<<
"第
"
<<
i
<<
"个,字符长度为:"
<<
maxlen
-
1
<<
"
\n字符串为:"
<<
str
<<
endl;
system("pause");
}
下面是使用了vector
的方法
#include
#include
#include
using
namespace
std;
int
main()
{
vector
sv;
string
str;
int
maxlen
=
0;
int
len
=
0;
cout
<<
"请输入一段字符串(ctrl+z)完成输入:\n";
getline(cin,str,'
');
while
(cin)
{
sv.push_back(str);
if
(maxlen
<
str.size())
{
maxlen
=
str.size();
len
=
sv.size();
}
getline(cin,str,'
');
}
cout
<<
"共有"
<<
sv.size()
<<
"个词组\n"
;
cout
<<
"最长字符串味:\n";
cout
<<
"第
"
<<
len
<<
"个,字符长度为:"
<<
maxlen
<<
"
\n字符串为:"
<<
***.at(len-1)
<<
endl;
system("pause");
}
页:
[1]
2