Программа, которая считывает два массива от пользователя(L1 и L2) и выводит L1 — L2, если L2 является подмассивом L1

#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. Без проблем. Удачи в будущем!