zoukankan      html  css  js  c++  java
  • 最长最短单词

    最长最短单词


    链接: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]='';
      strncpy(s2,s+min2,min1);
      s2[min1]='';
      printf("%s
    %s",s1,s2);
      return 0;
    }
  • 相关阅读:
    C#中跨线程访问控件问题解决方案
    asp.net网站中配置文件的加密
    C#中XML使用总结
    连接加密Access数据库的字符串设置方法
    asp.net中常用的26个优化性能的方法
    C#中Math的使用总结
    关于ASP.NET页面打印技术的总结
    域登录获取用户名字的控制
    Web界面设计基本原则
    域登录获得用户名称
  • 原文地址:https://www.cnblogs.com/EdSheeran/p/7326940.html
Copyright © 2011-2022 走看看