c - 在C中逐行读取文件,

标签 c input huffman-code

我一直致力于创建一个类似于下面的霍夫曼表。 enter image description here

我想做的是我有一些 C 代码可以翻译字母数组及其频率数组,我现在尝试读取一个文件并将文件的行号转换为匹配的 ASCII 代码(第 32 行将转换为 ASCII 代码 32)并获取该行的内容。我是 C 语言新手,还没有探索过获取文件,本质上我可以使用一些技巧。

  • 加载文件
  • 逐行读取文件并将数字内容分配给数组
  • 抓取 # 行,然后将其转换为匹配的 ASCII 代码。

如果需要,我可以发布我的代码,但我对抓取文件作为我的输入感到更加困惑。

int main(int argc, char* argv[])
{
    char arr[127];
    int freq[127];
    int num_of_line = 127;
    int size = sizeof(arr) / sizeof(arr[0]);
    FILE *fp = fopen("kjvdist.txt","r");
    if(fp == NULL){
        printf("The File Does not exist, Try Again?\n");
        return;
    }
    char *ptr[num_of_line];
    for(int row = 0; row < num_of_line; row++) {
            ptr[row] = malloc(size);/*allocate memory */
            fgets(ptr[row],sizeof(ptr[row]),fp);
            int index = ptr[row];
            char asc = ptr[row];
            arr[index] = asc; /* do operation here on ptr[row] to get equivalent ASCII code */
            for(int col = 0; ptr[row][col] ;col++) {
                if(ptr[row][col]>='0' && ptr[row][col]<='9')//check for alphabets & other also
                    int ascii = ptr[row][col] + 48;
                    /* something like above you need to do */
     }
}

    HuffmanCodes(arr, freq, size);
    return 0;
}

最佳答案

如果您希望读取的文件不大,最简单的解决方案可能是将整个文件读入内存。您可以使用 mmap() 或自行执行以下操作:

fd = open(filename, O_RDONLY, 0);
fstat(fd, &st);
data = malloc(st.st_size + 1);
read(fd, data, st.st_size);
data[st.st_size] = '\0';
close(fd);

然后在数组data中查找换行符(错误检查留给读者作为练习)。

lineno = 0;
line = data;
while ((nl = strchr(line, '\n') != NULL) {
    *nl = '\0';
    process(line, ++lineno);
    line = nl + 1;
}

关于c - 在C中逐行读取文件,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49839812/

相关文章:

javascript - 如果使用 Javascript 选择复选框,如何要求输入字段?

c++ - 读取和霍夫曼压缩 4 字节二进制字符串 STD C++ Linux 环境

zlib - 在 zlib 中,当字母的霍夫曼代码长度超过最大代码长度(15)时会发生什么?

Javascript 将输入附加到表单

php - 斜杠是自动添加的

java - 霍夫曼编码 - 符号分组

c - 如何在C编程中将IP地址定义为常量变量?

c - 当程序可以正常运行但在 gdb 中却不能运行时,会出现什么情况?

c - 如何在memmove后释放分配的指针

编译错误(调用的函数不是对象)