2017-01-28 10 views
0

Ich mache eine Herausforderung auf HackerRank hat die Methode herausgefunden, aber es gibt einen kleinen Fehler, den ich nicht herausfinden kann. Weitere Informationen sind https://www.hackerrank.com/challenges/sparse-arraysArray [0] ändert sich während der Eingabe der "for" -Schleife, kann nicht herausfinden, warum

Grundsätzlich habe ich nur ein Problem mit arr [0]. Es speichert arr [0] als 'aba', und sobald es die erste for-Schleife erreicht, ändert es sich in 'ab'. Warum?

Eingang:

4 
aba 
baba 
aba 
xzxb 
3 
aba 
xzxb 
ab 

Code:

int main() { 
    int i, j; 
    int n; 
    int q; 
    scanf("%d", &n); 
    char* arr[n]; 
    char* test[q]; 
    char* s; 
    int counter[q]; 

    for (i = 0; i < q; i++) { 
    counter[i] = 0; 
    } 

    for (i = 0; i < n; i++) { 
    arr[i] = malloc(20); 
    scanf("%s", arr[i]); 
    } 

    scanf("%d", &q); 

    for (i = 0; i < q; i++) { 
    test[i] = malloc(20); 
    scanf("%s", test[i]); 
    } 

    for (i = 0; i < n; i++) { 

    for (j = 0; j < q; j++) { 

     if (strcmp(arr[i], test[j]) == 0) { 

     counter[j]++; 
     } else { 
     } 
    } 
    } 
    for (i = 0; i < q; i++) { 
    printf("%d\n", counter[i]); 
    } 
    return 0; 
} 
+1

char * test [q] vor q erklärt wurde gegeben! – Rand

+0

Warum deklarieren Sie alle Ihre Variablen an der Spitze der Funktion? Das war in C89 notwendig, aber es war ... fast 30 Jahre. Es wurde als schlechte Übung für eine lange Zeit betrachtet. – Alexander

+0

Wird dies im Kopf behalten, danke! Und als Antwort, ich bin ~ 3 Wochen alter Codierer – Rand

Antwort

1

Sie erklärt test und counter als Array der Größe q vor initialisieren q mit. Bewegen Sie die Deklaration nach scanf("%d",&q);. bewegen sich auch die Initialisierung Schleife von counter:

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

int main() { 
    int i, j; 
    int n; 
    int q; 
    scanf("%d", &n); 
    char* arr[n]; 
    char* s; 

    for(i=0; i<n; i++) { 
    arr[i]= malloc(20); 
    scanf("%s",arr[i]); 
    } 

    scanf("%d", &q); 
    int counter[q]; 
    char* test[q]; 

    for(i=0; i<q; i++) { 
    counter[i] = 0; 
    } 
    for(i=0; i<q; i++) { 
    test[i]= malloc(20); 
    scanf("%s",test[i]); 
    } 

    for(i=0; i<n; i++) { 
    for(j=0; j<q; j++) { 
     if (strcmp(arr[i],test[j]) == 0) { 
     counter[j]++; 
     } 
    } 
    } 
    for(i=0; i<q; i++) { 
    printf("%d\n", counter[i]); 
    } 
    return 0; 
} 
+0

Danke Ihnen !!! Argh, ich kann die dummen Dinge, die ich manchmal mache, nicht glauben. Wird diese Antwort akzeptieren, wenn die Mindestannahmezeit abgelaufen ist. – Rand

0
#include <stdio.h> 
#include <string.h> 
#include <math.h> 
#include <stdlib.h> 
int main() { 
    int i, j; 
    int n; 
    int q; 
    scanf("%d", &n); 
    char* arr[n]; 


    for (i = 0; i < n; i++) { 
    arr[i] = malloc(20); 
    scanf("%s", arr[i]); 
    } 

    scanf("%d", &q); 

    char* test[q]; 
    char* s; 
    int counter[q]; 


    for (i = 0; i < q; i++) { 
    counter[i] = 0; 
    } 
    for (i = 0; i < q; i++) { 
    test[i] = malloc(20); 
    scanf("%s", test[i]); 
    } 

    for (i = 0; i < n; i++) { 

    for (j = 0; j < q; j++) { 

     if (strcmp(arr[i], test[j]) == 0) { 

     counter[j]++; 
     } else { 
     } 
    } 
    } 
    for (i = 0; i < q; i++) { 
    printf("%d\n", counter[i]); 
    } 
    return 0; 
} 

versuchen dies, Verwendung varialble nach Deklaration und Initialisierung

Verwandte Themen