2016-11-21 3 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 <= количество' ->' 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 символ ** `

A[j] поэтому char *

является Вы не можете использовать char * как индекс массива.

Его действительно трудно понять, как исправить его, потому что A, B, C не являются хорошими именами переменных. Может быть, вы имеете в виду (int)(*A[j]), то есть значение int первого символа в строке, но это кажется маловероятным. Первый шаг, измените имена A, B, C на что-то значимое.

+0

Я обновил код, но есть еще предупреждения и «Ошибка сегментации (core dumped)» после написания всех строк, любых подсказок? – bardamu

+0

Теперь, когда код компилируется, вам нужно поставить обновленный код в вопрос. Я задал бы новый вопрос, так как его совершенно другой problerm – pm100

+0

Надеюсь, вы не использовали (int) (* A [j] ', который будет компилироваться, но ошибочно ошибочен – pm100

Смежные вопросы