轮胎螺丝拧不下来:C高手进,出了点问题.

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 04:51:35
这有段代码,这段程序是输入一个字符串, 将此字符串中最长的单词输出,程序在注释行附近有两个错误,请试调试改正,但调试改正中不得增删语句。

int alph(char c)
{
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
return(1);
else
return(0); /* find 1 */
}
int longest(char str)
{
int len=0,i,length=0,flag=1,point,place;
for(i=0;i<=strlen(str);i++)
if(alph(str[i]))
if(flag)
{
flag=0;
point=i;
}
else
len++;
else /* Find 2 */
{
flag=0;
if(len>length)
{ length=len;
place=point;
len=0; }
}
return(place);
}
main( )
{
int i;
char line[100];
printf("Enter string\n");
gets(line);
printf("the longest is:");
for(i=longest(line);alph(line[i]);i++)
printf("%c",line[i]);
printf("\n");
}

你的程序本身就有问题,我没有对你的程序进行删改,现在能运行了,但是你的算法有问题,你自己改进吧!~
#include <stdio.h>
#include<string.h>

int alph(char c)
{
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
return(1);
else
return(0); /* find 1 */
}
int longest(char str[])
{
int len=0,i,length=0,flag=1,point,place;
for(i=0;i<=strlen(str);i++)
if(alph(str[i]))
{if(flag)
{
flag=0;
point=i;
}
else
len++; }
else /* Find 2 */
{
flag=0;
if(len>length)
{ length=len;
place=point;
len=0; }
}
return(place);
}
void main( )
{
int i;
char line[100];
printf("Enter string\n");
gets(line);
printf("the longest is:");
for(i=longest(line);alph(line[i]);i++)
printf("%c",line[i]);
printf("\n");
}

else /* Find 2 */
{
flag=1; //
...........

if(flag)
{
flag=0;
point=i;
len=1;
}

你这个程序是函数的参数调用错误。
在主函数main中,定义line为数组,调用函数longest(line)的时候,实参line实际上是指向数组首地址的指针。而在定义函数longest的时候,形参str定义为字符型,实参和形参的类型不一致,所以会有错误。只要把形参str定义为字符指针就可以了。即把函数定义改为:
int longest(char *str)