我正在对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;
}
答案 0 :(得分:1)
在初始化test
之前,您已将counter
和q
声明为大小为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;
}
答案 1 :(得分: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