2017-01-28 1 views
0

Je fais un défi sur HackerRank a compris la méthode, mais il y a une légère erreur que je ne peux pas comprendre. Plus d'informations si nécessaire est https://www.hackerrank.com/challenges/sparse-arraysArray [0] change en entrant dans la boucle "for", ne peut pas comprendre pourquoi

Fondamentalement, j'ai seulement un problème avec arr [0]. Il stocke arr [0] en tant que 'aba', puis une fois qu'il atteint la première boucle, il devient 'ab'. Pourquoi?

Entrée:

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 * essai [q] a déclaré avant q a été donné! – Rand

+0

pourquoi déclarez-vous toutes vos variables en haut de la fonction? C'était nécessaire en C89, mais ça fait ... près de 30 ans. Il a été considéré comme une mauvaise pratique pour un temps longggg. – Alexander

+0

Gardera cela à l'esprit, merci! Et comme pour répondre, je suis codeur de ~ 3 semaine année – Rand

Répondre

1

Vous avez déclaré test et counter comme un tableau de taille q avant d'avoir initialize q. Déplacez-vous déclaration juste après scanf("%d",&q);. déplacer aussi la boucle d'initialisation de 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

Merci vous !!! Argh, je ne peux pas croire les bêtises que je fais parfois. Acceptera cette réponse lorsque le temps d'acceptation minimum sera écoulé. – 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; 
} 

essayer, l'utilisation Varialble après la déclaration et l'initialisation