You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写C语言函数计算文本文件数据集中0和1的出现概率

C语言实现数据集最后一列0/1概率统计

实现逻辑

  • 直接逐行读取文本文件,无需解析前面所有列,只提取每行最后一个有效字符作为目标标识位,计算效率更高
  • 累计统计0、1的出现次数以及总有效行数,最终概率为对应计数除以总行数

完整代码

#include <stdio.h>
#include <string.h>

#define MAX_LINE_LEN 1024 // 可按实际行最长长度调整

void count_label_probability(const char* file_path) {
    FILE *fp = fopen(file_path, "r");
    if (fp == NULL) {
        printf("文件打开失败,请检查路径是否正确\n");
        return;
    }

    char line_buf[MAX_LINE_LEN];
    int total_lines = 0;
    int count_0 = 0, count_1 = 0;

    while (fgets(line_buf, MAX_LINE_LEN, fp) != NULL) {
        // 跳过空行
        if (strlen(line_buf) <= 1) continue;
        // 去掉末尾的换行、回车符
        int len = strlen(line_buf);
        while (len > 0 && (line_buf[len-1] == '\n' || line_buf[len-1] == '\r')) {
            len--;
            line_buf[len] = '\0';
        }
        if (len == 0) continue;
        // 取最后一位作为标识位
        char last_char = line_buf[len - 1];
        if (last_char == '0') {
            count_0++;
            total_lines++;
        } else if (last_char == '1') {
            count_1++;
            total_lines++;
        }
    }
    fclose(fp);

    if (total_lines == 0) {
        printf("文件中无有效数据行\n");
        return;
    }

    // 计算概率
    double prob_0 = (double)count_0 / total_lines;
    double prob_1 = (double)count_1 / total_lines;

    printf("总有效数据行数:%d\n", total_lines);
    printf("标识位0出现次数:%d,概率:%.4f\n", count_0, prob_0);
    printf("标识位1出现次数:%d,概率:%.4f\n", count_1, prob_1);
}

// 测试用主函数
int main() {
    // 替换为你的实际txt文件路径
    count_label_probability("dataset.txt");
    return 0;
}

测试结果(针对示例数据集)

你提供的6条示例数据中,标识位0出现5次、1出现1次,运行代码输出结果如下:

总有效数据行数:6
标识位0出现次数:5,概率:0.8333
标识位1出现次数:1,概率:0.1667

注意事项

  • 若数据集行长度超过1024,调整MAX_LINE_LEN宏定义的数值即可
  • 若行末尾存在多余空白字符,可在取最后一位前增加空白字符过滤逻辑
  • 概率输出的小数位数可通过修改printf中的%.4f调整,比如保留2位改为%.2f即可

内容的提问来源于stack exchange,提问作者Exx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:36:07