首页 > 解决方案 > 在 txt 文件中搜索关键字并用 C 记录它

问题描述

我正在尝试使用 C 来搜索包含 C 代码的文件。它旨在搜索整个文件,找到某些关键字或字符(例如查找 Ints、Longs、For 循环等)并通过递增计数器记录它们,以及计算所有代码总行数。然后它意味着提供每个关键字的总数,因此可以根据关键字在文件中出现的频率计算百分比。

但是,我无法让代码识别关键字。我应该如何阅读代码的总行以及查找关键字?

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

#define _CRT_SECURE_NO_WARNINGS

/*  Count and compute:

    number of total lines
    number and percentage of blank lines
    number and percentage of comments (start with // or /*)
    number and percentages of ints, longs, floats, doubles, char
    number and percentages of if's
    number and percentage of else's
    number and percentage of for's
    number and percentage of switch
    number and percentage of semicolons
    number and percentage of structs
    number and percentage of arrays (contains [ or ], divide count by 2)
    number of blocks (contains { or }, divide count by 2)
*/


int main(void)
{
    int lineCount = 0;  // Line counter (result) 
    int forCount = 0; // For counter
    int intCount = 0;
    char c;

    FILE *ptr_file;
    char buf[1000];

    ptr_file = fopen("file.txt", "r");
    if (!ptr_file)
        return 1;

    while (fgets(buf, 1000, ptr_file) != NULL) {


        for (c = getc(ptr_file); c != EOF; c = getc(ptr_file)) {
            if (c == '\n') // Increment count if this character is newline 
                lineCount = lineCount + 1;
        }
    }
    fclose(ptr_file);
    //End of first scan
    ptr_file = fopen("file.txt", "r");
    if (!ptr_file)
        return 1;

    while (fgets(buf, 1000, ptr_file) != NULL) {
        for (c = getc(ptr_file); c != EOF; c = getc(ptr_file)) {
            if (c == 'for') // Increment count if this character is for
                forCount = forCount + 1;
        }
    }
    fclose(ptr_file);
    //End of second scan
    ptr_file = fopen("file.txt", "r");
    if (!ptr_file)
        return 1;

    while (fgets(buf, 1000, ptr_file) != NULL) {
        for (c = getc(ptr_file); c != EOF; c = getc(ptr_file)) {
            if (c == 'int') // Increment count if this character is for
                intCount = intCount + 1;
        }
    }

    fclose(ptr_file);
    printf("\nThe file has %d lines\n", lineCount);
    printf("\nThe file has %d fors\n", forCount);
    printf("\nThe file has %d ints\n", intCount);
}

标签: cfopenfgetsgetc

解决方案


您需要使用sscanf并逐行解析它。

对于发现的每个项目,保持计数应该是没有问题的。

但是正如您所讨论的(在其他论坛上寻求帮助),您需要的功能就是这个。


推荐阅读