关于strlen()的惊天大秘(最长单词)

引子:这一切的一切都是因为一个题————

描述

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

输入

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

输出

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

样例输入

I am a student of Peking University.

样例输出

University

下面是我一开始的代码(粗糙),注意,不要管它于这个问题是对是错,重要的是没输出!!!

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<bits/stdc++.h>
using namespace std;
#define MAX  -100000
char aa[1000000],bb[100000];
int main()
{
    int a,b,c=0,i=0,max=MAX;
     while(1)
     {
         cin>>aa;
         if(max<strlen(aa))   {max=strlen(aa);strcpy(bb,aa);}
         if(aa[strlen(aa)-1]=='.')  break;
     }
     cout<<bb;
}

WHAT!!!没输出?这个大致的思路是对的,为什么没输出?于是我和其他人讨论了一下,从而发现了个今天大秘;

就稍微改了一下代码


    int a,b,c=0,i=0,max=MAX;
     while(1)
     {
         cin>>aa;c=strlen(aa);
         if(max<c)   {max=strlen(aa);strcpy(bb,aa);}
         if(aa[strlen(aa)-1]=='.')  break;
     }

没错,就增加一个c,就有输出了,看到这儿,我们不禁要问一句为什么?是strlen道德的沦丧,还是人性的泯灭,于是我想我的老师请教了下。等有回复在更新。

更新:

 老师虽然还没给我回复(我估计他忘了),但我通过一些文章也了解了strlen的注意事项。现在此说说一些注意事项吧。

       无论怎么说我们也不能忘记它的身份啊,它是一个函数,所以当它用来比较时会一次又一次被调用,这极大影响了效率和时间,可以先把strlen的值给一个变量,用变量来比较就节省了很多吧。

猜你喜欢

转载自blog.csdn.net/qq_43408238/article/details/86607101