2016-11-21 32 views
0

文字列を最初の文字で並べ替えるソートアルゴリズムを記述する必要がありますが、Count関数で「エラー:配列添字は整数ではありません。おそらくASCIIを使用する必要がありますが、私は方法を知らない。何か案は?配列の添字は整数ではありません[カウントソート]

aaa.c: In function ‘Count’: 
aaa.c:20:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
      C[i]=(char)((int)C[i]+(int)C[i-1]); 
        ^
aaa.c:20:33: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
      C[i]=(char)((int)C[i]+(int)C[i-1]); 
           ^
aaa.c:20:15: warning: assignment makes pointer from integer without a cast [-Wint-conversion] 
      C[i]=(char)((int)C[i]+(int)C[i-1]); 
      ^
aaa.c:22:25: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
       B[(int)C[(int)A[j]]]=A[j]; 
         ^
aaa.c:22:18: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
       B[(int)C[(int)A[j]]]=A[j]; 
       ^
aaa.c:23:18: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
       C[(int)A[j]]=C[(int)A[j]]-1; 
       ^
aaa.c:23:31: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
       C[(int)A[j]]=C[(int)A[j]]-1; 



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

#define MaxStringLength 30 
#define MaxStringNumber 5 
#define NumberOfLetters 26 

char **A; 
char **B; 
char **C; 

void Count(char **A, char **B, int quantity){ 
     int i,j; 

     for (i=1;i<=NumberOfLetters;i++) C[i]=0; 
     for (j=1;j<=quantity;j++) 
      C[A[j][1]-96] +=1; 
     for (i=2;i<=NumberOfLetters;i++) 
      C[i]=(char)((int)C[i]+(int)C[i-1]);  
     for (j=MaxStringNumber;j>0;j--){ 
       B[(int)C[(int)A[j]]]=A[j]; 
       C[(int)A[j]]=C[(int)A[j]]-1; 

     } 
} 

void printing(char **array, int quantity){ 
     int i; 
     for (i=1;i<=quantity;i++) 
       printf("%s \n", array[i]); 
} 

void reading(char **array, int quantity){ 
     char word[MaxStringLength]; 
     int i; 
     for (i=1;i<=quantity; i++){ 
       scanf("%s",word); 
       array[i] = (char*) malloc(sizeof(char)*MaxStringLength); 
       strcpy(array[i],word); 
     } 
} 

int main(){ 
     A=(char**) malloc((MaxStringNumber+1)*sizeof(char*)); 
     B=(char**) malloc((MaxStringNumber+1)*sizeof(char*)); 
     C=(char**) malloc((MaxStringNumber+1)*sizeof(char*)); 

     printf("Array A:\n"); 
     reading(A,MaxStringNumber); 
     Count(A,B,MaxStringNumber); 
     printf("Sorted:\n"); 
     printing(B,MaxStringNumber); 

     return 0; 
} 
+0

エラーのある行番号を与えていると確信していますが、私はあなたにヒントを与えます - 'A [j]'は整数ではありません。では、C [A [j]]とは何でしょうか? –

+0

私はエラーを含んでいますが、それでもそれを得ることはありません – bardamu

+0

BTW 'i = 1; i <= quantity' - >' i = 0; i BLUEPIXY

答えて

0
eng.c:18:18: error: array subscript is not an integer 
       C[A[j]] = C[A[j]]+1; 

エラーメッセージは、それが言うことを意味します。

A is aのchar ** `

A[j]あなたは配列のインデックスとしてchar *を使用傾けるのでchar *

です。

A、B、Cは良い変数名ではないので、それを修正する方法は本当に難しいです。たぶん、(int)(*A[j])は、文字列の最初の文字のint値を意味するかもしれませんが、そうは思われません。まず、A、B、Cの名前を意味のあるものに変更します。

+0

私はコードを更新しましたが、すべての文字列を書き込んだ後に警告と "Segmentation fault(core dumped)"というヒントが残っていますか? – bardamu

+0

コードがコンパイルされたら、更新されたコードを質問に入れる必要があります。私は全く別のプロブレムから新しい質問をするだろう – pm100

+0

コンパイルしても間違っている(int)(* A [j] ' – pm100

関連する問題