写一函数,输入一行字符,将此字符串中最长的单词输出。
结果不对。
程序:
int alphabetic(char c) /* 判断当前字符是否字母,是则返回1,否则返回0 */
{
if((c>=’a'&&c<=’z')||(c>=’A'&&c<=’Z'))
return 1;
else
return 0;
}
int longest(char string[]) /* 寻找最长单词地起始位置 */
{
int len=0;
int i;
int length=0;
int flag=1;
int place=0;
int point;
for(i=0;i<=strlen(string);i++)
if(alphabetic(string[i])) /* 检查是否是字母,是则flag=0,将i值给point */
if(flag)
{
point=i;
flag=0;
}
else
len++; /* 当前单词已累计的个数 */
else
{
flag=1;
if(len>=length)
{
place=point;
len=0;
}
}
return(place);
}
main()
{
int i;
char line[100];
printf(“Input one line:\n”);
gets(line);
printf(“\nThe longest word is:”);
for(i=longest(line);alphabetic(line[i]);i++)
printf(“%c”,line[i]);
printf(“\n”);
getch ();
return 0;
}
>> 本文固定链接: http://www.vcgood.com/archives/1700
源代码中length在循环过程中没赋值,始终为零。
len在循环过程中,没有初始化为0,始终在增加!
[code]
int pos_max = -1; //保存最长一个单词的开头
int len_max = 0; //最长单词的长度
int pos_cur = -1; //当前单词的开头
int len_cur = 0; //当前单词的长度
int pos = 0; //当前判断的字符
char string[100] = "i am like the world! helloworld! haha!";
char maxword[100];
for ( pos = 0; pos < strlen( string ); pos++ ) {
if( alphabetic( string[ pos ] ) == 1 ) { //是否是英文字符
if( pos_cur == -1 ) {
pos_cur = pos;
}
len_cur++;
} else { //不是
if ( len_cur > len_max ) { //判断
pos_max = pos_cur;
len_max = len_cur;
}
//初试化当前单词
pos_cur = -1;
len_cur = 0;
}
}
maxword[0] = '\0';
if( len_max > 0 ) {
strncpy( maxword, &string[pos_max], len_max );
maxword[len_max] = '\0';
}
printf( maxword );
[/code]
非常感谢,我想了好久都没有想出来。