鱼C论坛

 找回密码
 立即注册
查看: 1591|回复: 2

[已解决]写函数,输入一行字符输出最长的单词。

[复制链接]
发表于 2021-9-27 16:33:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
[code]#include <stdio.h>
#include <string.h>

int alphabetic(char c)
{
        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 (alphabtic(string[i]))
                {
                        if (flag)
                        {
                                point = i;
                                flag = 0;
                        }
                        else
                        {
                                len++;
                        }
                }
                else
                {
                        flag = 1;
                        if (len >= length)
                        {
                                length = len;
                                place = point;
                                len = 0;
                        }
                }

        }

        return(place);

}

int main(void)
{
        int i;
        char line[100];

        printf("输入一行:\n");
        gets_s(line);
        printf("最长的单词是:");

        for (i = longest(line); alphabetic(line[i]); i++)
        {
                printf("%c", line[i]);
        }

        printf("\n");

        return 0;
}
最佳答案
2021-9-27 16:45:37
1.函数名字写不对,报错都提示了,函数名是 alphabetic 不是 alphabtic
2.get_s()函数我dev用不了,用了gets()代替了,如果代码有问题,换回get_s()试试
  1. #include <stdio.h>
  2. #include <string.h>

  3. int alphabetic(char c)
  4. {
  5.         if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
  6.         {
  7.                 return(1);
  8.         }
  9.         else
  10.         {
  11.                 return(0);
  12.         }
  13. }

  14. int longest(char string[])
  15. {
  16.         int len = 0;
  17.         int i;
  18.         int length = 0;
  19.         int flag = 1;
  20.         int place = 0;
  21.         int point;

  22.         for (i = 0; i <= strlen(string); i++)
  23.         {
  24.                 if (alphabetic(string[i]))
  25.                 {
  26.                         if (flag)
  27.                         {
  28.                                 point = i;
  29.                                 flag = 0;
  30.                         }
  31.                         else
  32.                         {
  33.                                 len++;
  34.                         }
  35.                 }
  36.                 else
  37.                 {
  38.                         flag = 1;
  39.                         if (len >= length)
  40.                         {
  41.                                 length = len;
  42.                                 place = point;
  43.                                 len = 0;
  44.                         }
  45.                 }

  46.         }

  47.         return(place);

  48. }

  49. int main(void)
  50. {
  51.         int i;
  52.         char line[100];

  53.         printf("输入一行:\n");
  54.         gets(line);
  55.         printf("最长的单词是:");

  56.         for (i = longest(line); alphabetic(line[i]); i++)
  57.         {
  58.                 printf("%c", line[i]);
  59.         }

  60.         printf("\n");

  61.         return 0;
  62. }
复制代码
AC6~QH8T26KN2{9)N5K_L.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-27 16:45:37 | 显示全部楼层    本楼为最佳答案   
1.函数名字写不对,报错都提示了,函数名是 alphabetic 不是 alphabtic
2.get_s()函数我dev用不了,用了gets()代替了,如果代码有问题,换回get_s()试试
  1. #include <stdio.h>
  2. #include <string.h>

  3. int alphabetic(char c)
  4. {
  5.         if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
  6.         {
  7.                 return(1);
  8.         }
  9.         else
  10.         {
  11.                 return(0);
  12.         }
  13. }

  14. int longest(char string[])
  15. {
  16.         int len = 0;
  17.         int i;
  18.         int length = 0;
  19.         int flag = 1;
  20.         int place = 0;
  21.         int point;

  22.         for (i = 0; i <= strlen(string); i++)
  23.         {
  24.                 if (alphabetic(string[i]))
  25.                 {
  26.                         if (flag)
  27.                         {
  28.                                 point = i;
  29.                                 flag = 0;
  30.                         }
  31.                         else
  32.                         {
  33.                                 len++;
  34.                         }
  35.                 }
  36.                 else
  37.                 {
  38.                         flag = 1;
  39.                         if (len >= length)
  40.                         {
  41.                                 length = len;
  42.                                 place = point;
  43.                                 len = 0;
  44.                         }
  45.                 }

  46.         }

  47.         return(place);

  48. }

  49. int main(void)
  50. {
  51.         int i;
  52.         char line[100];

  53.         printf("输入一行:\n");
  54.         gets(line);
  55.         printf("最长的单词是:");

  56.         for (i = longest(line); alphabetic(line[i]); i++)
  57.         {
  58.                 printf("%c", line[i]);
  59.         }

  60.         printf("\n");

  61.         return 0;
  62. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-27 17:08:16 | 显示全部楼层
本帖最后由 jackz007 于 2021-9-27 17:25 编辑
  1. #include <stdio.h>

  2. void longest(char line[])
  3. {
  4.         int i , j , m                                    ;
  5.         char word[64]                                    ;
  6. // 获取最长单词长度
  7.         for(i = j = m = 0 ; line[i] ; i ++) {
  8.                 if(line[i] >= 'A' && line[i] <= 'Z' || line[i] >= 'a' && line[i] <= 'z') {
  9.                         j ++                             ;
  10.                 } else {
  11.                         if(j && j > m) m = j             ;
  12.                         j = 0                            ;
  13.                 }
  14.         }
  15.         if(j && j > m) m = j                             ;
  16.         printf("最长单词为 %d 个字符\n" , m)             ;
  17. // 提取所有最长单词
  18.         for(i = j = 0 ; line[i] ; i ++) {
  19.                 if(line[i] >= 'A' && line[i] <= 'Z' || line[i] >= 'a' && line[i] <= 'z') {
  20.                         word[j ++] = line[i]             ;
  21.                         word[j] = '\0'                   ;
  22.                 } else {
  23.                         if(j == m) printf("%s\n" , word) ;
  24.                         j = 0                            ;
  25.                 }
  26.         }
  27.         if(j == m) printf("%s\n" , word)                 ;
  28. }

  29. int main(void)
  30. {
  31.         char s[512]                                      ;
  32. // 取得键盘输入
  33.         gets(s)                                          ;
  34.         longest(s)                                       ;
  35. }
复制代码

        编译、运行实况:
  1. D:\0002.Exercise\C>g++ -o x x.c

  2. D:\0002.Exercise\C>x
  3. Abc12,CDEF,12HIJKm,88KLJMi,5588ABCDE
  4. 最长单词为 5 个字符
  5. HIJKm
  6. KLJMi
  7. ABCDE

  8. D:\0002.Exercise\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-26 11:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表