#arrays #c #sub-array
Вопрос:
Я создал эту программу, которая считывает два массива от пользователя(L1 и L2) и печатает L1 — L2, если L2 является поддиапазоном L1.Например, если L1 ={«a», «2», «c», «d», «e»} и L2 ={«2», «c», «d»}, то он должен печатать {«a», «e»}. Но у меня возникли некоторые проблемы с выводом. Я получаю правильный вывод только для некоторых значений, но для большинства я получаю L2, а не поддиапазон L1.
#include<stdlib.h>
#include<stdio.h>
int main() {
int n1, n2, j = 0, i = 0, temp = 0, a = 0;
//ARRAY INPUT
printf("Enter number of characters in L1: ");
scanf("%d", amp;n1);
int l1[n1];
for (int i = 0; i < n1; i ) {
printf("Enter character %d: ", i 1);
scanf(" %c", amp;l1[i]);
}
printf("Enter number of characters in L2: ");
scanf("%d", amp;n2);
int l2[n2];
for (int i = 0; i < n2; i ) {
printf("Enter character %d: ",i 1);
scanf(" %c", amp;l2[i]);
}
//FOR L1 > L2
while (i < n1) {
if(l1[i] == l2[j]) {
i ;
j ;
if (j == n2) {
a = 1;
break;
}
}
else {
i = temp 1;
temp = i;
j = 0;
}
}
if (a == 0) {
printf("l2 is not a sub array of l1");
}
else if (a == 1) {
printf("{");
for (int i = 0; i < n1; i ) {
if (i >= temp amp;amp; i < (temp n2))
continue;
printf("%c ", l1[i]);
}
printf("}");
}
exit(0);
}```
Комментарии:
1. Что должно выводиться, если L1 есть
{'a','a','b','a'}
, а L2 есть{'a'}
? В таком случае, он должен печатать:"b"
,"a b a"
, или"a a b"
? Аналогично , если L1 есть{'a','a','b','a'}
и L2 есть{'a', 'a'}
, что он печатает?2. «a b a» и «b a» соответственно
3. У вас есть:
scanf("% c",amp;l2[i]);
. Я почти уверен, что вы не хотели оставлять промежуток между%
«иc
«. Эта же проблема существует дважды.4. даа, это была ошибка, я изменил это
" %c"
сейчас, но все та же проблема5. Не используйте
scanf()
, когда вы хотите прочитать ввод.fgets()
Затем используйте для анализа результатsscanf()
.scanf()
это очень подвержено ошибкам, и вам действительно следует избегать этого.
Ответ №1:
Ваши «Массивы» должны быть char
массивом, а int
не .
char l1[n1];
char l2[n2];
Комментарии:
1. Спасибо! Это было спасением. У меня завтра задание, и это было просто очень полезно
2. Без проблем. Удачи в будущем!