鱼C论坛

 找回密码
 立即注册
查看: 823|回复: 5

找单词数

[复制链接]
发表于 2023-11-26 17:08:43 | 显示全部楼层 |阅读模式

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

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

x
从键盘输入一行字符(长度小于1000),统计其中单词的个数,各单词以空格分隔,且空格数可以是多个。

  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5.     char str1[100];
  6.     fgets(str1,100,stdin);
  7.     int n=strlen(str1);
  8.     int i,s=0;
  9.     if((str1[0]>='a'&&str1[0]<='z')||(str1[0]>='A'&&str1[0]<='Z'))
  10.     {
  11.         s++;
  12.     }
  13.     for(i=1;i<n;i++)
  14.     {
  15.         if((str1[i]>='a'&&str1[i]<='z')||(str1[i]>='A'&&str1[i]<='Z'))
  16.         {
  17.             s=s;
  18.         }
  19.         else
  20.         {
  21.             if(str1[i]==' ')
  22.             {
  23.                if(str1[i-1]==' ')
  24.              {
  25.                 s++;
  26.              }
  27.             }
  28.         }
  29.     }
  30.      printf("%d",s+1);
  31.      return 0;
  32. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-26 17:08:56 | 显示全部楼层
有多种方法可以统计一行字符中的单词个数。下面是一种简单的实现方式:
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main() {
  4.     char str[1000];
  5.     fgets(str, 1000, stdin);
  6.    
  7.     int wordCount = 0;
  8.     int isWord = 0; // 标记当前是否在一个单词中
  9.    
  10.     for (int i = 0; i < strlen(str); i++) {
  11.         // 如果当前字符是字母或数字,且前一个字符不是字母或数字,则认为进入了一个新的单词
  12.         if ((str[i] >= 'a' && str[i] <= 'z' || str[i] >= 'A' && str[i] <= 'Z' || str[i] >= '0' && str[i] <= '9') && !(str[i-1] >= 'a' && str[i-1] <= 'z' || str[i-1] >= 'A' && str[i-1] <= 'Z' || str[i-1] >= '0' && str[i-1] <= '9')) {
  13.             isWord = 1;
  14.             wordCount++;
  15.         }
  16.     }
  17.    
  18.     printf("单词个数:%d\n", wordCount);
  19.    
  20.     return 0;
  21. }
复制代码

这段代码通过遍历输入字符串中的每一个字符,当遇到字母或数字时,并且它的前一个字符不是字母或数字时,就认为进入了一个新的单词。通过这种方式逐个统计单词个数。

需要注意的是,在C语言中,字符数组需要提前分配内存空间,所以我们声明了一个长度为1000的字符数组str来存储输入字符。

另外,注意fgets()函数会在读取到换行符时结束读取,如果用户输入行字符的长度超过了999个字符,可能需要进行额外处理。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-26 17:19:05 | 显示全部楼层
FishC_GPT 发表于 2023-11-26 17:08
有多种方法可以统计一行字符中的单词个数。下面是一种简单的实现方式:

只有英文和空格,找单词哪里不对
#include<stdio.h>
#include<string.h>
int main()
{
    char str1[100];
    fgets(str1,100,stdin);
    int n=strlen(str1);
    int i,s=0;
    if((str1[0]>='a'&&str1[0]<='z')||(str1[0]>='A'&&str1[0]<='Z'))
    {
        s++;
    }
    for(i=1;i<n;i++)
    {
        if(((str1>='a'&&str1<='z')||(str1>='A'&&str1<='Z'))&&!(((str1[i-1]>='a'&&str1[i-1]<='z')||(str1[i-1]>='A'&&str1[i-1]<='Z'))))
        {
           s++;
        }
    }
     printf("%d",s);
     return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-26 17:19:26 | 显示全部楼层
yueyufeng 发表于 2023-11-26 17:19
只有英文和空格,找单词哪里不对
#include
#include ...

您的代码在判断字符是否为字母和空格上有一些问题,并且缺少对单词个数的统计。

下面是修正后的代码:
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. int main() {
  5.     char str[1000];
  6.     fgets(str, 1000, stdin);
  7.    
  8.     int wordCount = 0;
  9.     int inWord = 0; // 标记当前是否在一个单词中
  10.    
  11.     for (int i = 0; i < strlen(str); i++) {
  12.         // 如果当前字符是字母,则认为进入了一个新的单词
  13.         if (isalpha(str[i])) {
  14.             if (!inWord) {
  15.                 inWord = 1;
  16.                 wordCount++;
  17.             }
  18.         } else {
  19.             inWord = 0;
  20.         }
  21.     }
  22.    
  23.     printf("单词个数:%d\n", wordCount);
  24.    
  25.     return 0;
  26. }
复制代码

这段代码会从键盘输入一行字符串,然后通过遍历字符串的每个字符,判断是否为字母。如果当前字符是字母且前一个字符不是字母,则认为进入了一个新的单词,将单词个数加1。最后输出统计出的单词个数。

注意,在使用该代码时,您需要使用英文和空格作为输入,否则结果可能不准确。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-26 17:31:43 | 显示全部楼层
FishC_GPT 发表于 2023-11-26 17:19
您的代码在判断字符是否为字母和空格上有一些问题,并且缺少对单词个数的统计。

下面是修正后的代码:

#include<stdio.h>
#include<string.h>
int main()
{
    char str1[1000];
    fgets(str1,1000,stdin);
    int n=strlen(str1);
    int i,s=0,Word=0;
    for(i=0;i<n;i++)
    {
        if(((str1>='a'&&str1<='z')||(str1>='A'&&str1<='Z')||(str1 >= '0' && str1 <= '9')))
        {
            if (!Word)
            {
                Word = 1;
               s++;
            }
        } else {
            Word = 0;
        }
    }
     printf("%d",s);
     return 0;
}
哪里不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-26 17:32:06 | 显示全部楼层
yueyufeng 发表于 2023-11-26 17:31
#include
#include
int main()
{
    char str1;
...

您的代码中有一些语法错误和逻辑问题。下面是修正后的代码:
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. int main() {
  5.     char str1[1000];
  6.     fgets(str1, 1000, stdin);
  7.     int n = strlen(str1);
  8.     int wordCount = 0;
  9.     int inWord = 0;
  10.     for (int i = 0; i < n; i++) {
  11.         if (isalpha(str1[i])) { // 判断当前字符是否为字母
  12.             if (!inWord) {
  13.                 inWord = 1;
  14.                 wordCount++;
  15.             }
  16.         } else {
  17.             inWord = 0;
  18.         }
  19.     }
  20.     printf("单词个数:%d\n", wordCount);
  21.     return 0;
  22. }
复制代码

修正后的代码使用一个布尔变量`inWord`来标记是否正在统计一个单词,在遍历字符串的每个字符时,如果当前字符是字母且上一个字符不是字母,则认为进入了一个新的单词,将单词个数加1。最后输出统计结果。

需要注意的是,输入的字符串长度不能超过数组的大小,这里假设字符串长度不会超过1000。另外,该方法只适用于英文和空格的情况。如果要处理其他语言或特殊字符,可能需要采用其他的方法。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-3 11:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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