信奥赛一本通1149:最长单词2

简介: 【题目描述】一个以‘.’结尾的简单英文句子,单词之间用空格分隔,没有缩写形式和其它特殊形式。【输入】一个以‘.’结尾的简单英文句子(长度不超过500),单词之间用空格分隔,没有缩写形式和其它特殊形式。【输出】该句子中最长的单词。如果多于一个,则输出第一个。【输入样例】I am a student of Peking University.【输出样例】University

【题目描述】

一个以‘.’结尾的简单英文句子,单词之间用空格分隔,没有缩写形式和其它特殊形式。

【输入】

一个以‘.’结尾的简单英文句子(长度不超过500),单词之间用空格分隔,没有缩写形式和其它特殊形式。

【输出】

该句子中最长的单词。如果多于一个,则输出第一个。

【输入样例】

I am a student of Peking University.

【输出样例】

University

话不多说,直接上代码。

C++:
#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s1,s2,s3;  //三个string类的字符串类型
    int count=0;     //用来比较单词的长度
    do
    {
        cin>>s1;    
        s3=s1;         //借助第三方
        if(s3[s3.size()-1]=='.')     //遇到带有.的单词时抹去
                s3[s3.size()-1]='\0';
        if(s3.size()>count)   //比较单词长度
        {            
            s2=s3;               
            count=s3.size();
        }               
    }while(s1[s1.size()-1]!='.');  //知道最后一个单词的最后出现.
    cout<<s2;      
}
C语言:
#include<stdio.h>
#include<string.h>
int main()
{
    char c[501];     
    fgets(c,501,stdin);  //使用fgets()来输入字符串
    /*gets(c);   */       //因为gets()输入不安全所以建议少用,现在用gest输入在信奥赛中是无法通过的                
    int count=0;         //计算每个单词的长度
    int max=0;           //表示最长单词的长度
    int pos1,pos2;           //pos1表示单词的起始位置,pos2表示单词的末位置
    for(int i=0;i<strlen(c);i++)  //循环遍历
    {
        if(c[i]!=' '&&c[i]!='.') //没遇到空格或者.的时候就表示是同一个单词
            count++;
        else                      
        {
            if(count>max)     //如果该单词的长度大于max
            {
                max=count;      //重新初始化max
                pos1=i-count;    //寻找该单词的初始位置
                pos2=i-1;      //寻找末位置
            }
            count=0;      //赋值为0开始下一个单词的长度计数
        }
    }
    for(int i=pos1;i<=pos2;i++) 
        printf("%c",c[i]);        //输出第一次出现的最长的单词
}

好啦,本题就到此结束啦!在此,我建议大家学C的同时学习C++,遇到字符问题的时候使用C++是能够更快更方便的解决的!

相关文章
|
1月前
|
算法 前端开发 数据处理
小白学python-深入解析一位字符判定算法
小白学python-深入解析一位字符判定算法
47 0
|
6月前
|
存储 自然语言处理 算法
算法编程(十九):词典中最长的单词
算法编程(十九):词典中最长的单词
71 0
|
5月前
|
算法
力扣经典150题第十九题:最后一个单词的长度
力扣经典150题第十九题:最后一个单词的长度
30 0
|
存储 Cloud Native Go
【刷题日记】1455. 检查单词是否为句中其他单词的前缀
【刷题日记】1455. 检查单词是否为句中其他单词的前缀
108 1
|
Cloud Native
【刷题日记】30. 串联所有单词的子串
本次刷题日记的第 75篇,力扣题为:30. 串联所有单词的子串 ,困难
|
6月前
|
算法 索引
算法编程(二十):仅仅反转字母
算法编程(二十):仅仅反转字母
43 0
|
测试技术 C语言 C++
【浙江大学PAT真题练习乙级】1006 换个格式输出整数 (15分) 真题解析
【浙江大学PAT真题练习乙级】1006 换个格式输出整数 (15分) 真题解析
|
Go C++ Cloud Native
【刷题日记】744. 寻找比目标字母大的最小字母
本次刷题日记的第 23 篇,力扣题为:744. 寻找比目标字母大的最小字母 ,简单
|
C语言 C++
信奥赛一本通1142:单词的长度
【题目描述】 输入一行单词序列,相邻单词之间由1个或多个空格间隔,请对应地计算各个单词的长度。 注意:如果有标点符号(如连字符,逗号),标点符号算作与之相连的词的一部分。没有被空格间开的符号串,都算作单词。 【输入】 一行单词序列,最少1个单词,最多300个单词,单词之间用至少1个空格间隔。单词序列总长度不超过1000。 【输出】 依次输出对应单词的长度,之间以逗号间隔。
377 0
|
人工智能 C语言
信奥赛一本通(2034:【例5.1】反序输出)
【题目描述】 输入n个数,要求程序按输入时的逆序把这n个数打印出来,已知整数不超过100个。也就是说,按输入相反顺序打印这n个数。 【输入】 输入一行共有n个数,每个数之间用空格隔开。 【输出】
966 0