C语言统计输入行数、单词数、字符数

这篇博客介绍了如何使用C语言编写程序来统计输入的行数、单词数和字符数。通过状态切换的方式来判断单词的边界,对每个读取的字符进行判断,更新行数、单词数和字符数的计数。
摘要由CSDN通过智能技术生成

这个问题的关键在于统计单词的个数:状态的转变定义了一个单词

 

#include<stdio.h>

#define IN 1
#define OUT 0

main()
{
    int c, nl, nw, nc, state;
    state = OUT;
    nl = nw = nc = 0;
    while((c = getchar()) != '0')
    {
        ++nc;
        if(c == '/n')
            ++nl;
        if(c == ' ' || c == '/n' || c == '/t')
            state = OUT;
        else if(state == OUT)
        {
            state = IN;
            ++nw;
        }
    }
    printf("%d %d %d/n", nl, nw, nc);
}

C语言中,要计算给定字符串的字符行数单词,可以按照以下步骤操作: 1. **字符**: - 使用`strlen()`函获取字符串的长度,该函返回字符串中字符量,包括空字符`\0`。 ```c #include <string.h> size_t char_count = strlen(str); ``` 2. **行数**: - 需要考虑换符`\n`的存在。你可以遍历整个字符串,每遇到一个`\n`就增加行数。这里假设每个'\n'标志着新开始。 ```c size_t line_count = count_new_lines(str); int lines[] = {0}; // 或者用组存储每的位置 for (size_t i = 0; str[i] != '\0'; ++i) { if (str[i] == '\n') { line_count++; lines[line_count - 1] = i + 1; // 更新结束位置 } } ``` 3. **单词**: - 分割字符串成单词,可以先忽略空格和标点符号。然后简单地减去开头和结尾可能出现的空格,再加一,因为统计的是包含第一个单词。 ```c size_t word_count = 0; for (size_t i = 0; i <= char_count; ++i) { if (str[i] == ' ' || is_punctuation(str[i])) continue; size_t start = i; while (i < char_count && !is_punctuation(str[i]) && str[i] != ' ') { i++; } word_count += 1; if (start < i) { lines[line_count++] = start; // 如果有单词,则更新信息 } } word_count--; // 减去最后可能存在的空格导致的计错误 ``` 注意,这里的`count_new_lines()`、`is_punctuation()`和`is_punctuation()`是假设你已经有了相应的函来检测换符和非字母字符。实际编写时,你需要根据C标准库提供的函或自定义函实现它们。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值