最长最短单词

最长最短单词


链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1143

【题目描述】

 输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔。

 试输出第1个最长的单词和第1个最短单词。

 

【输入】

一行句子。

【输出】

第1行,第一个最长的单词。

第2行,第一个最短的单词。

【输入样例】

I am studying Programming language C in Peking University

【输出样例】

Programming
I

【提示】

提示:

如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。

 

【题解】得到字符串后先拆分单词,flag记录当前状态,再将单词长度比较

#include<iostream>
#include<vector>
using namespace std;

vector <char> s3,s1,s2;
int maxn=0,minn=5000;

void cmp(int l,int &ma,int &mi){
    if(l<mi){
        mi=l;s2.clear() ;
        for(vector<char>::iterator it =s3.begin();it!=s3.end();it++){
            s2.push_back(*it); 
        }
    }
    if(l>ma){
        ma=l;s1.clear() ;
        for(vector<char>::iterator it =s3.begin();it!=s3.end();it++){
            s1.push_back(*it); 
        }
    }
    
}
void remake(string s){
    int flag=0;
    for(int i=0;i<s.size();i++){
        if(s[i]!=','&&s[i]!=' '){
            s3.push_back(s[i]); flag=1;
        }else{
            if(flag)cmp(s3.size(),maxn,minn);
            s3.clear() ;flag=0;
        }
    }
    if(!s3.empty())    cmp(s3.size(),maxn,minn);
}
int main(){
    string s;
    getline(cin,s);
    remake(s);
    for(vector<char>::iterator it =s1.begin();it!=s1.end();it++){
            cout<<*it;
        }
    cout<<endl;
    for(vector<char>::iterator it =s2.begin();it!=s2.end();it++){
            cout<<*it;
        }
    
} 

 

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
string s;
int b,a[20005],c[305];

int main(){
    int L=0,pos=0,pos2=0,M=200;
    getline(cin,s);
    int l=s.length();
    for(int i=0;i<l;i++)
        if((s[i]<='z'&&s[i]>='a')||(s[i]<='Z'&&s[i]>='A'))
            a[i]=1;
    for(int i=0;i<l;i++)
    {
        int j=i,flag=0;
        while(a[j++])
        {
            if(!a[j-2])flag=1;
        }
        if(j-i>L)
        {
            L=j-i;
            pos=i;
        }
        if(j-i<M&&flag)
        {
            M=j-i;
            pos2=i;
        }
        
    }
    
    for(int i=pos;i<pos+L;i++)
        if((s[i]<='z'&&s[i]>='a')||(s[i]<='Z'&&s[i]>='A'))
        cout<<s[i];
    cout<<endl;
    for(int i=pos2;i<pos2+M;i++)
    if((s[i]<='z'&&s[i]>='a')||(s[i]<='Z'&&s[i]>='A'))
    cout<<s[i];
    
}

 

#include<stdio.h>
#include<string.h>
char s[20005],s1[105],s2[105];
int max1=-1,max2=0,min1=101,min2=0;
int main()
{
  gets(s);
  int i=0,len=strlen(s);
  while (i<len)
  {
    while (i<len&&(s[i]==' '||s[i]==','))i++;
    if (i==len)break;
    int j=i;
    while (j<len&&(s[j]!=' '&&s[j]!=','))j++;
    if (j-i>max1) 
    {
      max1=j-i;
      max2=i;
    }
    if (j-i<min1)
    {
      min1=j-i;
      min2=i;
    }
    i=j;
  }
  strncpy(s1,s+max2,max1);
  s1[max1]='\0';
  strncpy(s2,s+min2,min1);
  s2[min1]='\0';
  printf("%s\n%s",s1,s2);
  return 0;
}

 

转载于:https://www.cnblogs.com/EdSheeran/p/7326940.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值