Вводить массив символов до тех пор, пока два последних введенных символа не будут равны двум первым - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Вводить массив символов до тех пор, пока два последних введенных символа не будут равны двум первым введенным символам. Вывести на экран все цифры.
#include "stdafx.h"
#include "stdio.h"
#include <malloc.h>
#include <windows.h>
#include <locale.h>
 
int main()
{
    setlocale(LC_ALL, "RUS");
    char* A;
    int i = 2, N;
 
    //создание массива
    A = (char*)malloc(2 * sizeof(char));
    printf("Введите массив   \n");
 
    //ввод 1ого значения массива
    scanf_s("%c", &A[0]);
    //ввод 2ого значения массива
    scanf_s("%c", &A[1]);
 
    //ввод последующих значений массива, перераспределение памяти под массив, условие остановки
    while (!(A[i - 1] == A[0] && A[i] == A[1]))
    {
        i++;
        A = (char*)realloc(A, (i + 1)*sizeof(char));
        scanf_s("%c", &A[i]);
    } 

    system("pause");
    return 0;
}
Есть код по вводу массива с условием остановки, но работает он тольео для последнего символа и я не знаю в чем проблема.
#include "stdafx.h"
#include "stdio.h"
#include <malloc.h>
#include <windows.h>
#include <iostream>
#include <locale.h>
 
int main()
{
    setlocale(LC_ALL, "ENG");
    char num[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
    const int n = 10;
    char A[n];
    int i, j;
 
    //создание и ввод массива
    printf("Введите элементы массива А   \n");
    for (i = 0; i < n; i++)
    {
        scanf_s("%d", &A[i]);
    }
 
    printf("Только числа из массива:\n");
    for (int i = 0; i < n; i++) 
    {
        for (int j = 0; j < n; j++) 
        {
            if (A[i] == num[j]) 
            {
                printf("%d", A[i]);
            }
        }
    }
 
    system("pause");
    return 0;
}
И есть код по проверке одного массива на наличие другого, но он не работает и просит только массив вводить, а в ответе выдает непонятно откуда взявшиеся значения

Решение задачи: «Вводить массив символов до тех пор, пока два последних введенных символа не будут равны двум первым»

textual
Листинг программы
#include <stdio.h>
#define SIZE 1000
 
int main ( void )
{
    
    char firstCharacter, secondCharacter, penultimateCharacter;
    char yourArray[SIZE] = "";
    signed short nextCharacter, counter = 1, arrayCounter = 0;
 
    puts( "Please enter your sequence: " );
    fflush( stdout );
 
    while ( !((nextCharacter = getchar()) == secondCharacter ) ||  !( penultimateCharacter == 
    firstCharacter )) {
        
        yourArray[arrayCounter++] = nextCharacter;
        penultimateCharacter = nextCharacter;
 
        if ( nextCharacter == firstCharacter ) {
            penultimateCharacter = firstCharacter;
            continue;
        }
        
        
        if ( counter == 1 ) {
            
            firstCharacter = nextCharacter;
            ++counter;
            continue;
        }
        
        if ( counter == 2 ) {
            
            secondCharacter = nextCharacter;
            ++counter;
            continue;
        }
    }
    
    puts( "\nIt was found the sequence of the first two characters" );
    puts( "The numbers in your sequence is follows: ");
 
    for ( arrayCounter = 0; arrayCounter < SIZE; ++arrayCounter ) {
        
        if ( yourArray[arrayCounter] >= '0' && yourArray[arrayCounter] <= '9' )
            printf( "%2c", yourArray[arrayCounter] );
    
    }
    
    puts( "" );
 
    return 0;
}

Объяснение кода листинга программы

  1. В начале определяются переменные:
    • firstCharacter
    • secondCharacter
    • penultimateCharacter
    • yourArray - массив символов
    • nextCharacter
    • counter - счетчик количества введенных символов
    • arrayCounter - счетчик для заполнения массива
  2. Затем выводится сообщение с просьбой ввести последовательность символов.
  3. Далее идет цикл, который продолжается до тех пор, пока два последних введенных символа не будут равны двум первым.
  4. Внутри цикла:
    • символ добавляется в массив
    • penultimateCharacter обновляется
    • если текущий символ равен первому, то penultimateCharacter обновляется
    • если счетчик равен 1, то первый символ сохраняется и счетчик увеличивается
    • если счетчик равен 2, то второй символ сохраняется и счетчик увеличивается
  5. После окончания цикла выводится сообщение о том, что найдена последовательность из первых двух символов.
  6. Затем выводится последовательность чисел, введенных в массив, в формате таблицы.
  7. В конце возвращается 0, что означает успешное завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.5 из 5
Похожие ответы