鱼C论坛

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

找单词数

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

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

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

x
从键盘输入一行字符(长度小于1000),统计其中单词的个数,各单词以空格分隔,且空格数可以是多个。
#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[i]>='a'&&str1[i]<='z')||(str1[i]>='A'&&str1[i]<='Z'))
        {
            s=s;
        }
        else
        {
            if(str1[i]==' ')
            {
               if(str1[i-1]==' ')
             {
                s++;
             }
            }
        }
    }
     printf("%d",s+1);
     return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-26 17:08:56 | 显示全部楼层
有多种方法可以统计一行字符中的单词个数。下面是一种简单的实现方式:
#include <stdio.h>#include <string.h>int main() {    char str[1000];    fgets(str, 1000, stdin);        int wordCount = 0;    int isWord = 0; // 标记当前是否在一个单词中        for (int i = 0; i < strlen(str); i++) {        // 如果当前字符是字母或数字,且前一个字符不是字母或数字,则认为进入了一个新的单词        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')) {            isWord = 1;            wordCount++;        }    }        printf("单词个数:%d\n", wordCount);        return 0;}
这段代码通过遍历输入字符串中的每一个字符,当遇到字母或数字时,并且它的前一个字符不是字母或数字时,就认为进入了一个新的单词。通过这种方式逐个统计单词个数。

需要注意的是,在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[i]>='a'&&str1[i]<='z')||(str1[i]>='A'&&str1[i]<='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 ...

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

下面是修正后的代码:
#include <stdio.h>#include <string.h>#include <ctype.h>int main() {    char str[1000];    fgets(str, 1000, stdin);        int wordCount = 0;    int inWord = 0; // 标记当前是否在一个单词中        for (int i = 0; i < strlen(str); i++) {        // 如果当前字符是字母,则认为进入了一个新的单词        if (isalpha(str[i])) {            if (!inWord) {                inWord = 1;                wordCount++;            }        } else {            inWord = 0;        }    }        printf("单词个数:%d\n", wordCount);        return 0;}
这段代码会从键盘输入一行字符串,然后通过遍历字符串的每个字符,判断是否为字母。如果当前字符是字母且前一个字符不是字母,则认为进入了一个新的单词,将单词个数加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[i]>='a'&&str1[i]<='z')||(str1[i]>='A'&&str1[i]<='Z')||(str1[i] >= '0' && str1[i] <= '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;
...

您的代码中有一些语法错误和逻辑问题。下面是修正后的代码:
#include <stdio.h>#include <string.h>#include <ctype.h>int main() {    char str1[1000];    fgets(str1, 1000, stdin);    int n = strlen(str1);    int wordCount = 0;    int inWord = 0;    for (int i = 0; i < n; i++) {        if (isalpha(str1[i])) { // 判断当前字符是否为字母            if (!inWord) {                inWord = 1;                wordCount++;            }        } else {            inWord = 0;        }    }    printf("单词个数:%d\n", wordCount);    return 0;}
修正后的代码使用一个布尔变量`inWord`来标记是否正在统计一个单词,在遍历字符串的每个字符时,如果当前字符是字母且上一个字符不是字母,则认为进入了一个新的单词,将单词个数加1。最后输出统计结果。

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 12:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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