gpt4 book ai didi

C程序不计算文本文件中的字母频率

转载 作者:太空宇宙 更新时间:2023-11-04 00:03:07 25 4
gpt4 key购买 nike

我需要编写一个程序,在文本文件中输出字母频率。它读取另一个文本文件的文本。问题是大多数字母的计数都是正确的,但少数字母的频率很高,但不正确。有人可以帮我解决这个问题吗?

谢谢!

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

#define NLETTERS 26

int main(int argc, char *argv[])
{
int c, i, accum = 0, letter[26];
FILE *ifp, *ofp;

printf ("argument 0 = argv[0] = '%s'n", argv[0]);
printf ("argument 1 = argv[1] = '%s'n", argv[1]);
printf ("argument 2 = argv[2] = '%s'n", argv[2]);

ifp = fopen(argv[1], "r");
ofp = fopen(argv[2], "w");

if (ifp == NULL)
perror("No input file");

if (ofp == NULL)
perror("Trouble making file");

for (i = 0; i < NLETTERS; i++) {
letter[i] = 0;

for(; (c = getc(ifp)) != EOF; ++accum) {
if (c >='a' && c <= 'z')
++letter[c - 'a'];
}

for (i = 0; i < NLETTERS; ++i) {
if (letter[i] != 0) {
fprintf(ofp, "%c:%5d",i + 'a', letter[i]);
putc('n', ofp);
fprintf(ofp, "%f%cnn", ((double)letter[i]/accum), 37);
}
}
}
return 0;
}

输入文件是:

Hi my name is niels and i a tying to write code.

输出文件包含:

a:    3
0.062500%

b:32767
682.645833%

c:1606416521
33467010.854167%

d:32769
682.687500%

e: 7
0.145833%

g:1606416545
33467011.354167%

h:32767
682.645833%

i: 6
0.125000%

j: 1
0.020833%

l: 1
0.020833%

m:1606416578
33467012.041667%

n:32771
682.729167%

o: 2
0.041667%

r: 1
0.020833%

s: 2
0.041667%

t: 3
0.062500%

w: 1
0.020833%

y:1606416530
33467011.041667%

z:32767
682.645833%

最佳答案

问题是您在将数组归零的循环中错放了主要代码。
变化:

for (i = 0; i < 26; i++) {
letter[i] = 0;

while ((c= getc(ifp)) != EOF) {

for (i = 0; i < 26; i++) {
letter[i] = 0;
}

while ((c= getc(ifp)) != EOF) {

去掉return 0 前的花括号,你就完成了。

关于C程序不计算文本文件中的字母频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34839536/

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