C语言 :从一个字符串中找出最长的单词,这程序哪错了

#include<stdio.h>
#include<string.h>
int main()
{
    //void max(char[], char[]);
    char a[100], b[100],c[100];
    int i, j=  0, k = 0, n,m;
    gets(a);
    n = strlen(a);
    for (i = 0;  i<n; i++)
    {
        if ((a[i] >= 'A'&&a[i] <= 'Z') || (a[i] >= 'a'&&a[i] <= 'z'))
        {
            b[j++] = a[i];

        }
    
        else if (j > k)
        {
            for (m = 0; m < j; m++)
                
            {
                c[m] = b[m];
                
            }
            k = m;
        
            j = 0;

        }
        else if (j <= k)
            j = 0;


    }
    c[k] = '\0';
    printf("%s", c);


}

 

楼主的代码修改如下,供参考:

#include<stdio.h>
#include<string.h>
int main()
{
    //void max(char[], char[]);
    char a[100], b[100],c[100];
    int i, j=0, k=0, n,m;
    gets(a);
    n = strlen(a);
    for (i = 0;  i<n+1; i++)//for (i = 0;  i<n; i++)
    {
        if ((a[i] >= 'A'&&a[i] <= 'Z') || (a[i] >= 'a'&&a[i] <= 'z'))
        {
            b[j++] = a[i];
        }

        else if (j > k)
        {
            for (m = 0; m < j; m++)

            {
                c[m] = b[m];

            }
            k = j;//k = m;
            j = 0;

        }
        else if (j <= k)
            j = 0;


    }
    c[k] = '\0';
    printf("%s\n", c);
    
}

 

#include <stdio.h>
 
#include <string.h>
 
int main()
 
{
 
 char s[128];
 
 char *p1, *p2;
 
 int max=0, len=0;
 
 printf("Input a string: ");
 
 gets(s);//此处用get更好,get会将空格也输入
 
 p1=s;
 
 for (int i=0; i<=strlen(s); i++)
 
 {
 
 if ((s[i]==' ') || (s[i]=='\0')) // 如果当前字符为空格或结束,则比较当前单词长度是否大于最大值,再将长度复位。
 
    {
 
    if (len>max)
 
    {
 
    max=len;
 
    p2=p1;
 
    }
 
    len=0;
 
    } 
 
    else // 如果当前字符非空,如果当前长度为0,则表示新单词。
 
    {
 
    if (len==0)
 
    p1=&s[i];
 
    len++;
 
    }
 
 }
 
 while (*p2 && *p2!=' ')
 
 printf("%c", *p2++);
 
}

 

代码直接用VS2010调试,除了gets需要改为gets_s外,输入 hello chinese yes ok,输出的c内容是chinese,没啥问题啊

判断的时候,字符串最后一个单词没有识别出来,最简单的修改方式是,在你读取的字符串末尾加一个空格,然后长度+1,这样就可以了。代码修改如下,如有帮助,请采纳一下,谢谢。

#include<stdio.h>
#include<string.h>
int main()
{
	//void max(char[], char[]);
	char a[100], b[100],c[100];
	int i, j=  0, k = 0, n,m;
	gets(a);
	n = strlen(a);
	
	//修改的地方:在字符串最后加一个空格,然后长度+1
	a[n] = ' ';
	n = n+1;

	for (i = 0;  i<n; i++)
	{
		if ((a[i] >= 'A'&&a[i] <= 'Z') || (a[i] >= 'a'&&a[i] <= 'z'))
		{
			b[j++] = a[i];
		}
		else if (j > k)
		{
			for (m = 0; m < j; m++)
			{
				c[m] = b[m];
			}
			k = m;
			j = 0;
		}
		else if (j <= k)
			j = 0;
	}
	c[k] = '\0';
	printf("%s", c);
}

 

您的问题已经有小伙伴解答了,请点击【采纳】按钮,采纳帮您提供解决思路的答案,给回答的人一些鼓励哦~~

ps:开通问答VIP,享受5次/月 有问必答服务,了解详情↓↓↓

【电脑端】戳>>>  https://vip.csdn.net/askvip?utm_source=1146287632
【APP 】  戳>>>  https://mall.csdn.net/item/52471?utm_source=1146287632