C++编程问题?输入一个英语句子,输出其中最长的单词,并输出次单词的位置。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++编程问题?输入一个英语句子,输出其中最长的单词,并输出次单词的位置。相关的知识,希望对你有一定的参考价值。
#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];
运行结果很奇葩(如图),求大神解释啊
#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开始算的。 参考技术A 这种情况 语句没有响应就是ascll代码意思就是超过所能理解的代码
用C或C++编写:输入一段英文句子,输出其中最长的单词
包含标点处理
#include <iostream>#include <string>
#include <algorithm>
#include <sstream>
int main()
std::string t, word, long_word;
getline(std::cin, t);
std::istringstream iss(t);
while (iss >> word)
std::string result;
std::remove_copy_if(word.begin(), word.end(),
std::back_inserter(result),
ispunct);
if (result.length() > long_word.length())
long_word = result;
std::cout << long_word << std::endl;
getchar();
return 0;
参考技术A #include<iostream>
#include<string>
using namespace std;
int main()
string word,longWord;
cout << "请输入英文句子,按ctrl+z后按下回车结束输入:\\n";
while (cin >> word)
if (word.length() > longWord.length())
longWord=word;
cout << "最长单词是"<<longWord<<endl;
return 0;
追问
谢谢
请问为什么要按ctrl+z再按回车输入
可不可以做到直接回车输入。。。。萌新一枚,望详细解释
本回答被提问者和网友采纳以上是关于C++编程问题?输入一个英语句子,输出其中最长的单词,并输出次单词的位置。的主要内容,如果未能解决你的问题,请参考以下文章
PAT算法题C++实现(Basic)1009 说反话 (20 分)
把一个英语句子中的单词次序颠倒后输出。例如输入“how are you”,输出“you are how”;
把一个英语句子中的单词次序颠倒后输出。例如输入“how are you”,输出“you are how”;