0

タスクは、頻度表を使用して (指定されたテキスト ファイル) 検出されたラテン文字を (大文字と小文字を区別せずに) ファイル f1 に出力することです。テーブルはアルファベット順に並べ替える必要があります。これまでのところ、私のプログラムは文字 A だけをカウントしています。アルファベット全体を調べてテーブルを別のファイルに出力するループの作成に問題があります。

#include <stdio.h>
const char FILE_NAME[] = "yo.txt";
#include <stdlib.h> 
#include <iostream>
using namespace std;
int main() {
    int   count = 0;  /* number of characters seen */
    FILE  *in_file;    /* input file */

    /* character or EOF flag from input */
    int             ch;

    in_file = fopen(FILE_NAME, "r");
    if (in_file == NULL) {
        printf("Cannot open %s\n", FILE_NAME);
        system("Pause");
        exit(8);
    }

    while (1) {
        char cMyCharacter = 'A';
        int value = (int)cMyCharacter;
        ch = fgetc(in_file);
        if (ch == EOF){
            break;
        }
        int file_character = (int) ch;
        if (file_character == value || file_character == value+ 32) {
             count++;
        }
    }

    printf("Number of characters in %s is %d\n", FILE_NAME, count);
    char cMyCharacter = 'A';
    int iMyAsciiValue = (int)cMyCharacter;
    cout << iMyAsciiValue;
    system("Pause");
    fclose(in_file);

    return 1;
}
4

1 に答える 1

2

最初に、a から z の周波数のサイズ 26 の配列を取得します。

int freq[26] = {0};

freq[0]freq[1]a」、「b」など。

第二に、変更

if (file_character == value || file_character == value+ 32)

if (file_character >= 'a' && file_character <= 'z')

すべての小文字のアルファベット (つまり、「a」から「z」)。

3番目に、インデックスを取得してカウントします

freq[file_character - 'a']++;

file_character - 'a'インデックスを計算し、残りはカウントします。

freq4 番目に、配列を印刷します。

5番目に、追加

else if (file_character >= 'A' && file_character <= 'Z')

大文字の場合、それに応じて後続のコードを変更します。

これはあなたの宿題です。プログラム全体を自分で理解しようとする必要があります。この回答が十分なヒントになることを願っています。

于 2012-11-25T17:15:51.510 に答える