gpt4 book ai didi

c - 在 C 中修复字母频率分析器

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

我是编程新手,我需要一些帮助才能让我的程序运行,因为我现在有点卡住了。它假设计算输入文本文件的字母和其他字符的频率然后打印出结果但是当我插入文件时没有任何反应(但它确实编译)。这是我到目前为止所拥有的。我认为这是因为我没有将数组的结果返回到主函数中,所以它可以打印出来,但我不知道该怎么做。您是否需要为数组使用 malloc(例如 int *alphabetCount = (int *)malloc(sizeof(int)*ALPHABET_SIZE);)然后稍后释放它?

如有任何帮助,我们将不胜感激!

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

#define ALPHABET_SIZE 26
#define FIRST_LC_LETTER 'a'
#define LAST_LC_LETTER 'z'
#define FIRST_UC_LETTER 'A'
#define LAST_UC_LETTER 'Z'

int freqAnalysis (int inputChar);

int main (int argc, char *argv[]) {

int inputChar = getchar();
int position = 0;

char alphabet [ALPHABET_SIZE] = {'a','b','c','d','e','f','g','h','i','j',
'k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
int alphabetCount [ALPHABET_SIZE];

freqAnalysis (inputChar);

while (position < ALPHABET_SIZE) {
printf ("Letter %c: %d\n",alphabet[position],alphabetCount[position]);
position++;
}
return EXIT_SUCCESS;
}

int freqAnalysis (int inputChar) {
int counter;
int numbers;
int spaces;
int specialChar;

int alphabetCount [ALPHABET_SIZE];
while (counter < ALPHABET_SIZE) {
counter = 0;
alphabetCount [counter] = 0;
counter ++;
}

while (inputChar != EOF) {
if (inputChar >= FIRST_LC_LETTER && inputChar <= LAST_LC_LETTER) {
alphabetCount [inputChar - FIRST_LC_LETTER] ++;
} else if (inputChar>=FIRST_UC_LETTER && inputChar<=LAST_UC_LETTER) {
alphabetCount [inputChar - FIRST_UC_LETTER] ++;
} else if (inputChar >= 0 && inputChar <= 9) {
numbers = 0;
numbers ++;
} else if (inputChar == ' ') {
spaces = 0;
spaces ++;
} else {
specialChar = 0;
specialChar ++;
}
}
printf ("Numbers: %d\nSpaces: %d\n Special characters: %d\n", numbers,
spaces, specialChar);
}

最佳答案

这里有一个类似的方法可以考虑。它被编写为从除 stdio.h 之外的所有 libc 头文件中删除依赖项。它不是调用 ctype.h 中的字符分类函数,而是依靠每个字符的 ASCII 值来设置 alphabetCount 索引。这两种方法都不比另一种好/坏,它们只是说明了使用各种可用工具解决同一问题的不同方法。

#include <stdio.h>

#define ALPHABET_SIZE 26

void freqAnalysis (FILE *fp, int *cnt);

int main (void)
{
int position = 0;
char *alphabet = "abcdefghijklmnopqrstuvwxyz";
int alphabetCount[ALPHABET_SIZE] = {0};

printf ("\nThe frequency analysis of the input characters:\n\n");

freqAnalysis (stdin, alphabetCount);

for (position = 0; position < ALPHABET_SIZE; position++)
printf (" %c/%c : %d\n", alphabet[position] - 32,
alphabet[position], alphabetCount[position]);

return 0;
}

void freqAnalysis (FILE *fp, int *cnt)
{
int c, numbers, spaces, specialChar;
c = numbers = spaces = specialChar = 0;

while ((c = fgetc (fp)) != '\n' && c != EOF)
{
if (c >= 'A' && c <= 'Z')
cnt[c - 'A']++;
else if (c >= 'a' && c <= 'z')
cnt[c - 'a']++;
else if (c >= '0' && c <= '9')
numbers++;
else if ( c == ' ' )
spaces++;
else
specialChar++;

}
printf (" Numbers : %d\n Spaces : %d\n Special : %d\n\n", numbers, spaces, specialChar);
}

输出

$ ./bin/charcount <<<"The Quick Brown Fox Jumps Over 1001 Lazy Dogs."

The frequency analysis of the input characters:

Numbers : 4
Spaces : 8
Special : 1

A/a : 1
B/b : 1
C/c : 1
D/d : 1
E/e : 2
F/f : 1
G/g : 1
H/h : 1
I/i : 1
J/j : 1
K/k : 1
L/l : 1
M/m : 1
N/n : 1
O/o : 4
P/p : 1
Q/q : 1
R/r : 2
S/s : 2
T/t : 1
U/u : 2
V/v : 1
W/w : 1
X/x : 1
Y/y : 1
Z/z : 1

关于c - 在 C 中修复字母频率分析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29423772/

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