引子:这一切的一切都是因为一个题————
描述
一个以'.'结尾的简单英文句子,单词之间用空格分隔,没有缩写形式和其它特殊形式,求句子中的最长单词。
输入
一个以'.'结尾的简单英文句子(长度不超过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的值给一个变量,用变量来比较就节省了很多吧。