gpt4 book ai didi

c - 使用 char,转换为 int 作为数组索引以将 "chars"的频率存储在文本文件中

转载 作者:太空宇宙 更新时间:2023-11-04 08:23:35 26 4
gpt4 key购买 nike

我正在编写一个简单的程序来存储文本文件中各种符号的出现次数。我正在使用 fgetc() 和一个文件指针从这个文件中读取。一次一个字符。我像这样在我的方法之外设置我的数组

int frequency[MAX_SYMBOLS] = {0};

MAX_SYMBOLS 被定义为 255。然后我阅读并尝试计算每次出现特定字符时下面是我的方法 set_frequency()

void set_frequency()
{

int count = 0;
char c;
FILE *fp = fopen("file.txt","r");

while((c = fgetc(fp)) != EOF)
{
if(c != ' ' && c != '\n')
{
frequency[(int) c]++;
count++;
}
}

fclose(fp);

}

iam 目前遇到一个段错误,我不确定为什么?我认为这是数组索引的问题。或者可能是我的文件的大小,因为它相当大。如果有人能提供帮助,那就太好了,因为老实说,我对 c 不是很好。

编辑

'c' 变量必须是 int 而不是 char,因为它是从 fgetc() 函数返回的。那么我就不必输入索引值了!!

最佳答案

除了 EOF 无法放入 char 之外,您还有 2 个潜在问题:

  1. MAX_SYMBOLS 小于 255,这是您可以使用平面 ascii 找到的字符。
  2. char 是一个带符号的整数。如果您读取大于 0x7f 的内容,它将转换为负数数组索引。

尝试使用整数进行读取以满足 EOF 的要求。您还将得到保证代码永远不会为负数,但在 0-255 范围内。

void set_frequency()
{

int count = 0;
int c;
FILE *fp = fopen("file.txt","r");

while((c = fgetc(fp)) != EOF)
{
if(c != ' ' && c != '\n')
{
frequency[c]++;
count++;
}
}

fclose(fp);

}

如果碰巧您必须使用字符来解决类似的问题,请使用强制转换来强制使用无符号值:

frequency[(int)(unsigned char) c]++;

关于c - 使用 char,转换为 int 作为数组索引以将 "chars"的频率存储在文本文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32207419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com