C++编程问题?输入一个英语句子,输出其中最长的单词,并输出次单词的位置。

#include<iostream>#include<string>usingnamespacestd;intfind(char*a,char*b);intmain(){... #include<iostream>
#include<string>
using namespace std;
int find(char *a,char *b);
int main(){
char a[80],b[80];
cout<<"请输入一个英文句子";
cin.getline(a,79);
int k=find(a,b);
cout<<"最长的单词是:";
for(int i=0;b[i]!=0;i++){
cout<<b[i];
}
cout<<"最长单词的起始位置下为:"<<k;
return 0;
}
int find(char *a,char *b){
char*j,*i;
int k=1;
j=a;i=a+1;
int c[80][2]={0};
int l=0;
while(*i!=0){
if(*i==' '||*i==','){
c[l][0]=i-j;
c[l][1]=j-a;
l++;
i=i+1;
j=i;
}
else i++;
}
for(k;k<=80;k++){
if(c[0][0]<c[k][0]){
c[0][0]=c[k][0];
c[0][1]=c[k][1];
}
}
for(int g=0;g<=c[0][0];g++){
b[g]=*(b+c[0][1]+g);
}
return c[0][1];
}
运行结果很奇葩(如图),求大神解释啊
展开
 我来答
sailingzyf
2013-03-03 · TA获得超过1329个赞
知道小有建树答主
回答量:860
采纳率:0%
帮助的人:1048万
展开全部
可能是字符串没加\0吧,数组b[80]没显示0初始化,find函数里也没有显式的加\0。没看懂你的算法,所以只能这样猜了。写了个标准库的方法,可以参考下:
#include <iostream>
#include <sstream>
#include <map>

using namespace std;
int main()
{
typedef string::size_type ST;
//存放所有单词的长度、单词本身、单词出现的位置
multimap<ST,pair<string,ST> > m;
string line;
cout<<"请输入一个英文句子:";
getline(cin,line);
ST pos=0;
while((pos=line.find(','))<line.size())
line[pos]=' ';//替换掉所有逗号

istringstream ins(line);
string token;
pos=0;
while(ins>>token)
m.insert(pair<ST,pair<string,ST> >(token.size(),
pair<string,ST>(token,pos=line.find(token,pos)+1)));

ST t=m.rbegin()->first;
//map容器默认是按照key排序的,最后的长度最大,往前找
for(multimap<ST,pair<string,ST> >::reverse_iterator it=m.rbegin();
it!=m.rend();++it)
if(it->first==t)
cout<<"最长的单词是:"<<it->second.first<<endl
<<"起始位置下为:"<<it->second.second<<endl;
else break;
}
如果有长度一样的词,按照倒序显示,这样简单些。起始位置从1开始算的。
海俊爱小诗
2013-03-03
知道答主
回答量:46
采纳率:0%
帮助的人:18.5万
展开全部
这种情况 语句没有响应就是ascll代码意思就是超过所能理解的代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式