簡體   English   中英

進入“ for”循環時,Array [0]正在更改,無法弄清原因

[英]Array[0] is changing while entering the “for” loop, can't figure out why

我正在對HackerRank進行挑戰,弄清楚了該方法,但是有一個小錯誤,我無法弄清楚。 如果需要的更多信息是https://www.hackerrank.com/challenges/sparse-arrays

基本上,我只對arr [0]有問題。 它把arr [0]存儲為'aba',然后一旦到達第一個for循環,它就會變為'ab'。 為什么?

輸入:

4
aba
baba
aba
xzxb
3
aba
xzxb
ab

碼:

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;
}

在初始化q之前,您將testcounter聲明為大小為q數組。 scanf("%d",&q);之后scanf("%d",&q);着聲明scanf("%d",&q); 同時移動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;
}
#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;
}

試試這個,在聲明和初始化之后使用varialble

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM