1

私がやりたいことは、txt ファイルを読み取り、char メンバーを持つ構造体に、ファイルのすべての文字を格納することです。

これが私のコードです:

typedef struct charClass {
  char simbolo;
  int freq;
} charClass;

これは main の重要な部分です。

 input = fopen("testo1.txt", "r");  

 fseek(input, 0, SEEK_END); //Mi posiziono alla fine del file
 int dim = ftell(input); //Ottengo il puntatore corrente (n char)
 fseek(input, 0, SEEK_SET); //Rimetto il puntatore all'inizio del file

 char tmpChar;
 charClass *car;
 car = malloc(dim*sizeof(int));

 int i = 0;

 while (!feof(input)) {
   tmpChar = getc(input);
   car[i].simbolo = tmpChar; 
   printf("\n%c", car[i].simbolo);
   car[i].freq++; 
   i++;
 }  

墜落した。

Webで検索してみましたが、答えが見つかりませんでした。

fscanf と strcpy も使用しようとしましたが、うまくいきませんでした。

ありがとう。

4

3 に答える 3

2

charClass 構造体に十分なスペースを割り当てていません。malloc を次のように置き換えてみてください。

car = malloc(dim * sizeof(charClass));

また、インデックス i を使用して、何にインデックスを付けているのかわかりません。charClasses の配列を作成していないようです...?

于 2012-10-15T17:26:06.457 に答える
1

コードの外観から、特定の文字がファイルに出現する回数を保存しようとしています。そのためには、ハッシュ関数をコーディングしてハッシュ テーブルに格納することをお勧めします。それはより速く、エラーが発生しにくくなります。

struct hash_blob{
   char character;
   int freq;
};
static struct hash_blob hashTable[52]; /*[A-Za-z]*//*Extend this size to include special characters*/

void setZero()
{
    int i = 0;
    for(i = 0; i < 52; i++) hashTable[i].freq = 0;
}
int compute_hash(char ch)
{
    if(ch >= 'A' && ch <= 'Z'){
       return ch-'A';
    }
    if(ch >= 'a' && ch <= 'z'){
       return ch - 'a' + 26;
    }
}

void add_hash(char ch)
{
    int loc = compute_hash(ch);
    hashTable[loc].character = ch;
    hashTable[loc].number++;
}

int main(int argc, char *argv[])
{
    int ch;
    char filename = "testo1.txt";
    FILE *f = (FILE *)fopen(filename,"r");
    if(f == NULL)return 1;
    while((ch = getc(f)) != EOF){
       add_hash(ch);
    }
    for(ch = 0; ch < 52; ch++)
    {
         printf("The number of times %c appears in the file is: %d times\n",hashTable[ch].character, hashTable[ch].number);  
    }
    return 0;
}
于 2012-10-15T17:38:42.227 に答える
0

これは、char 配列を初期化し、fgets() 関数を使用することで簡単に実行できます。

char buffer[50];
while(fgets(buffer,50,fp))//fp is the file pointer
  {
 /*Code for checking buffer elements and you can store them in your chosen array*/
  }
于 2012-10-15T17:32:27.367 に答える