繁体   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