📜  C测验– 109 |问题5(1)

📅  最后修改于: 2023-12-03 15:14:25.965000             🧑  作者: Mango

C测验– 109 |问题5

本题是一道C语言编程问题,需要使用C语言进行代码实现。

问题描述

编写一个函数,函数名为countWords,输入一个字符串,输出该字符串中单词的个数。

单词是指以空格、制表符或者回车符为间隔的一个或多个字符的序列。

例如,Hello, world!中包含两个单词。

函数原型
int countWords(char *s);
输入
  • 字符串s,字符串的长度不超过10000
输出
  • 一个整数,表示s中单词的个数
示例
#include <stdio.h>
#include <string.h>

int countWords(char *s)
{
    int count = 0, state = 0;
    while (*s)
    {
        if (*s == ' ' || *s == '\t' || *s == '\n')
            state = 0;
        else if (state == 0)
        {
            state = 1;
            count++;
        }
        s++;
    }
    return count;
}

int main()
{
    char str[10000];
    fgets(str, sizeof(str), stdin);
    printf("%d\n", countWords(str));
    return 0;
}

使用fgets函数读入字符串,然后调用countWords函数计算单词数量,并输出结果。

算法思路

该函数的算法思路如下:

  1. 定义变量count表示单词数量,变量state表示当前字符是否为空格、制表符或者回车符,默认值为0
  2. 从字符串的第一个字符开始循环判断,如果是空格、制表符或者回车符,将state设为0
  3. 如果不是空格、制表符或者回车符,判断state的值,如果为0,将state设为1,并将count加1
  4. 继续循环,直到字符串的末尾
  5. 返回count
总结

本题涉及到字符串的处理,需要对C语言字符串的一些基本操作有一定的了解,比如循环处理字符串、判断字符串中的字符类型等等。

在编写完代码后,可以通过给出的测试用例对代码进行简单的测试,以保证代码的正确性。