0

このプログラムでは、ファイル内のさまざまな文字のインスタンスを出力したいと考えています。出力には、出現回数、文字の 16 進数、文字自体の 3 つの変数が含まれます。誰かがこれで私を助けることができますか? ハマった!

 Results of program should be something like this:
 10 instance  of character 0x4s (O)
 10 instance  of character 0x51 (W)
 10 instance  of character 0x51 (Y)
 2 instances of character 0x65 (a)
 18 instances of character 0x67 (c)
 16 instances of character 0x81 (d)


//here is my program. 
#include <stdio.h>
#include <stdlib.h> 
#include <string.h>

const char FILE_NAME[] = "input.txt";


int main(argc, *argv[]) {

    char temp;   
     char count[255];

FILE *in_file;   
int ch;

fp = fopen(FILE_NAME, "r");
if (in_file == NULL) {
    printf("Can not open %s \n", FILE_NAME);
    exit(0);
}

while (!feof(fp)) {

    ch = fgetc(fp);

if(strchr(count, ch)!= NULL)
{

}

}
printf("%d instance of character (%c)", count);


fclose(in_file);
return (0);
}
4

2 に答える 2

1

これがあなたが望むものです(あなたのコードに基づいて、私による多くのコメントがあります):

#include <stdio.h>
#include <stdlib.h> 
#include <string.h>
#include <ctype.h>  // you need this to use isupper() and islower()

const char FILE_NAME[] = "input.txt";

int main(int argc,char *argv[]) {
    char temp;   
    unsigned count[52] = {0};  // An array to store 52 kinds of chars
    FILE *fp;   
    int i;

    fp = fopen(FILE_NAME, "r");
    if (fp == NULL) {
        printf("Can not open %s \n", FILE_NAME);
        exit(0);
    }

    while((temp = fgetc(fp)) != EOF) {   // use this to detect eof
        if(isupper(temp))
            count[26+(temp-'A')]++;   // capital letters count stored in 26-51
        if(islower(temp))
            count[temp-'a']++;        // lower letters count stored in 0-25
    }
    fclose(fp);  // When you don't need it anymore, close it immediately.

    for(i = 0; i < 26; i++)
        if(count[i])
            printf("%d instance of character 0x%x (%c)\n", count[i], 'a'+i, 'a'+i);
    for(; i < 52; i++)
        if(count[i])
            printf("%d instance of character 0x%x (%c)\n", count[i], 'A'+i-26, 'A'+i-26);
    return (0);
}
于 2012-10-18T09:41:33.147 に答える
0

配列は文字列ではないため、配列countを使用strchr()することはお勧めできません。また、タイプcharであるため、大きなファイルの範囲は非常に限られています。

おそらく。のようなものを使用する必要がありますunsigned long count[256]。開始する前に、必ずカウントを0に初期化してください。

また、は使用しないでくださいfeof()fgetc()返される文字(正しくはタイプint)がになるまで呼び出しをループするだけですEOF。増分のインデックスを作成するために使用する前に、それを何か正の値にキャストしcountます。

于 2012-10-18T09:05:26.097 に答える