p124 配列の例:アルファベットの出現回数の統計#
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
#include <limits.h>
#include <ctype.h>
#define LETTER_COUNT 26
int main(void)
{
uint32_t frequency[LETTER_COUNT] = { 0 };
char text[] = "頻度分析のための例文。\0";
// 各アルファベットの出現回数をカウント
for (uint32_t i = 0; text[i] != '\0'; i++)
{
char ch = tolower(text[i]);
if (ch >= 'a' && ch <= 'z') {
frequency[ch - 'a']++;
}
}
puts("文字の頻度:\n");
for (int i = 0; i < LETTER_COUNT; i++) {
if (frequency[i] > 0) {
printf("'%c': %d\n", 'a' + i, frequency[i]);
}
}
return 0;
}
強化後:
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
#include <limits.h>
#include <ctype.h>
#include <string.h> // strcspn関数を含む
#define LETTER_COUNT 26
#define MAX_TEXT_LENGTH 256 // 最大入力長を定義
int main(void)
{
uint32_t frequency[LETTER_COUNT] = { 0 };
char text[MAX_TEXT_LENGTH]; // ユーザー入力のテキストを格納するため
//char text[] = "頻度分析のための例文。\0";
printf("テキストを入力してください: ");
fgets(text, sizeof(text), stdin); // fgetsを使用して1行のテキストを読み込む
//改行文字を処理
text[strcspn(text, "\n")] = '\0'; // 改行文字を文字列の終端文字に置き換える
//各アルファベットの出現回数をカウント
for (uint32_t i = 0; text[i] != '\0'; i++)
{
char ch = tolower(text[i]);
if (ch >= 'a' && ch <= 'z') {
frequency[ch - 'a']++;
}
}
puts("文字の頻度:\n");
for (int i = 0; i < LETTER_COUNT; i++) {
if (frequency[i] > 0) {
printf("'%c': %d\n", 'a' + i, frequency[i]);
}
}
return 0;
}
この記事は Mix Space によって xLog に同期更新されました
元のリンクは https://hansblog.top/posts/study-book/c-p124