河南省区县名称:高手帮忙分析一下这段C的代码~`

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/30 03:52:18
查找字符串中最长单词
int zi(char c)
{

if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
return 1;
else
return 0;
}

int longest(char s[])
{
int len=0,i,length=0,flag=1,place=0,point;
for (i=0;i<=strlen(s);i++)
if (zi(s[i]))
主要是这里:
/////////////////////////////////////////////
if(flag)
{
point=i;
flag=0;
}
else
len++;
else
{
flag=1;
if(len>=length)
{ length=len;
place=point;
len=0;
/////////////////////////////////////////////
}
}
return place;
}

main()
{
int i;
char str[100];
gets(str);
for (i=longest(str);zi(str[i]);i++)
printf("%c",str[i]);
printf("\n");
}

if (zi(s[i])) //如果是字符
if(flag) //如果上一个字符是分隔符,词首
{
point=i; //point指向当前字符位置
flag=0; //将分隔符标志清0,开始计算当前词字母数
}
else //如果在词中间
len++; //计算词长度
else //如果不是字符
{
flag=1; //标志遇到分隔符
if(len>=length) //如果前面的词字母数量比当前最大的还要大.
{ length=len; //把当前最大设置为上一个词的字母数量
place=point; //把当前最大词位置设置为上一个词的首字位置.
len=0; //上一个词的长度清0准备接受下一个词的长度
}
}

LZ这个代码,表面用了很多if else,其实和使用了一堆goto没区别,极其混乱的思路

以我的编程经验,我要说上面这段代码编码风格极差:)

for (i=0;i<=strlen(s);i++)
{
if (zi(s[i]))
{
if(flag)
{
point=i;
flag=0;
}
else
{
len++;
}
}
else
{
flag=1;
if(len>=length)
{
length=len;
place=point;
len=0;
}
}
}