当前位置: 首页 > article >正文

C基础寒假练习(4)

输入带空格的字符串,求单词个数、

#include <stdio.h>
// 计算字符串长度的函数
size_t my_strlen(const char *str) 
{
    size_t len = 0;
    while (str[len] != '\0') 
    {
        ++len;
    }
    return len;
}

int main() 
{
    char str[100];
    printf("请输入一个字符串: ");
    fgets(str, sizeof(str), stdin);

    // 如果存在换行符,则将其移除
    size_t len = my_strlen(str);
    if (len > 0 && str[len - 1] == '\n') 
    {
        str[len - 1] = '\0';
    }

    int state = 0; // 0: 在单词外, 1: 在单词内
    int wordCount = 0;
    const char *ptr = str;

    while (*ptr) {
        if (*ptr == ' ' || *ptr == '\t' || *ptr == '\n')
        {
            state = 0;
        } 
        else if (state == 0) 
        {
            state = 1;
            ++wordCount;
        }
        ++ptr;
    }

    printf("单词个数: %d\n", wordCount);

    return 0;
}

下面是对代码的详细解释:

1. my_strlen 函数

size_t my_strlen(const char *str) 
{
    size_t len = 0;
    while (str[len] != '\0') 
    {
        ++len;
    }
    return len;
}

这个函数用于计算字符串的长度,即字符串中字符的数量(不包括终止符 \0)。它通过遍历字符串直到遇到终止符 \0 来计算长度。

2. main 函数

int main() 
{
    char str[100];
    printf("请输入一个字符串: ");
    fgets(str, sizeof(str), stdin);
  • 定义了一个字符数组 str,大小为 100。
  • 使用 fgets 从标准输入读取一行字符串并存储在 str 中。fgets 会读取最多 sizeof(str) - 1 个字符,并在末尾添加一个空字符 \0

3. 移除换行符

    size_t len = my_strlen(str);
    if (len > 0 && str[len - 1] == '\n') 
    {
        str[len - 1] = '\0';
    }
  • 调用 my_strlen 获取字符串的长度。
  • 如果字符串的最后一个字符是换行符 \n,则将其替换为空字符 \0,以去除换行符。

4. 计算单词数量

    int state = 0; // 0: 在单词外, 1: 在单词内
    int wordCount = 0;
    const char *ptr = str;

    while (*ptr) {
        if (*ptr == ' ' || *ptr == '\t' || *ptr == '\n')
        {
            state = 0;
        } 
        else if (state == 0) 
        {
            state = 1;
            ++wordCount;
        }
        ++ptr;
    }
  • 初始化状态变量 state 为 0,表示当前不在单词内。
  • 初始化单词计数器 wordCount 为 0。
  • 使用指针 ptr 遍历字符串。
  • 如果当前字符是空格、制表符或换行符,将状态设置为 0(表示不在单词内)。
  • 如果当前字符不是空白字符且状态为 0,说明遇到了一个新单词,将状态设置为 1,并增加单词计数器。
  • 继续移动指针到下一个字符。

5. 输出结果

    printf("单词个数: %d\n", wordCount);
    return 0;
}
  • 打印计算出的单词数量。
  • 返回 0,表示程序正常结束。

总结

这段代码通过遍历用户输入的字符串,识别出其中的单词并统计其数量。主要步骤包括读取输入、去除换行符、遍历字符串并统计单词数量。


http://www.kler.cn/a/526122.html

相关文章:

  • 【Rust自学】17.3. 实现面向对象的设计模式
  • MSU:通过图结构增强LLM推理
  • Vue3的el-table-column下拉输入实时查询API数据选择的实现方法
  • 力扣【1049. 最后一块石头的重量 II】Java题解(背包问题)
  • Windows程序设计8:获取文件大小的两种方式
  • 【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(一)
  • Oracle Primavera P6 最新版 v24.12 更新 2/2
  • 数据结构 前缀中缀后缀
  • 毕业设计--具有车流量检测功能的智能交通灯设计
  • 【二叉树的深搜】二叉树剪枝
  • Ubuntu安装VMware17
  • C++ 堆栈分配的区别
  • 【Block总结】PConv,部分卷积|即插即用
  • 【数据结构】最有效的实现栈和队列的方式(CC++语言版)
  • 计算机组成原理学习笔记
  • 组合模式 - 组合模式的实现
  • 从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(OLED设备层封装)
  • Sqoop源码修改:增加落地HDFS文件数与MapTask数量一致性检查
  • [Java]泛型(二)泛型方法
  • AJAX综合案例——图书管理