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

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

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

Вводить массив символов до тех пор, пока два последних введенных символа не будут равны двум первым введенным символам. Вывести на экран все цифры.
Листинг программы
  1. #include "stdafx.h"
  2. #include "stdio.h"
  3. #include <malloc.h>
  4. #include <windows.h>
  5. #include <locale.h>
  6. int main()
  7. {
  8. setlocale(LC_ALL, "RUS");
  9. char* A;
  10. int i = 2, N;
  11. //создание массива
  12. A = (char*)malloc(2 * sizeof(char));
  13. printf("Введите массив \n");
  14. //ввод 1ого значения массива
  15. scanf_s("%c", &A[0]);
  16. //ввод 2ого значения массива
  17. scanf_s("%c", &A[1]);
  18. //ввод последующих значений массива, перераспределение памяти под массив, условие остановки
  19. while (!(A[i - 1] == A[0] && A[i] == A[1]))
  20. {
  21. i++;
  22. A = (char*)realloc(A, (i + 1)*sizeof(char));
  23. scanf_s("%c", &A[i]);
  24. }
  25.  
  26. system("pause");
  27. return 0;
  28. }
Есть код по вводу массива с условием остановки, но работает он тольео для последнего символа и я не знаю в чем проблема.
Листинг программы
  1. #include "stdafx.h"
  2. #include "stdio.h"
  3. #include <malloc.h>
  4. #include <windows.h>
  5. #include <iostream>
  6. #include <locale.h>
  7. int main()
  8. {
  9. setlocale(LC_ALL, "ENG");
  10. char num[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
  11. const int n = 10;
  12. char A[n];
  13. int i, j;
  14. //создание и ввод массива
  15. printf("Введите элементы массива А \n");
  16. for (i = 0; i < n; i++)
  17. {
  18. scanf_s("%d", &A[i]);
  19. }
  20. printf("Только числа из массива:\n");
  21. for (int i = 0; i < n; i++)
  22. {
  23. for (int j = 0; j < n; j++)
  24. {
  25. if (A[i] == num[j])
  26. {
  27. printf("%d", A[i]);
  28. }
  29. }
  30. }
  31. system("pause");
  32. return 0;
  33. }
И есть код по проверке одного массива на наличие другого, но он не работает и просит только массив вводить, а в ответе выдает непонятно откуда взявшиеся значения

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #define SIZE 1000
  3.  
  4. int main ( void )
  5. {
  6.    
  7.     char firstCharacter, secondCharacter, penultimateCharacter;
  8.     char yourArray[SIZE] = "";
  9.     signed short nextCharacter, counter = 1, arrayCounter = 0;
  10.  
  11.     puts( "Please enter your sequence: " );
  12.     fflush( stdout );
  13.  
  14.     while ( !((nextCharacter = getchar()) == secondCharacter ) ||  !( penultimateCharacter ==
  15.     firstCharacter )) {
  16.        
  17.         yourArray[arrayCounter++] = nextCharacter;
  18.         penultimateCharacter = nextCharacter;
  19.  
  20.         if ( nextCharacter == firstCharacter ) {
  21.             penultimateCharacter = firstCharacter;
  22.             continue;
  23.         }
  24.        
  25.        
  26.         if ( counter == 1 ) {
  27.            
  28.             firstCharacter = nextCharacter;
  29.             ++counter;
  30.             continue;
  31.         }
  32.        
  33.         if ( counter == 2 ) {
  34.            
  35.             secondCharacter = nextCharacter;
  36.             ++counter;
  37.             continue;
  38.         }
  39.     }
  40.    
  41.     puts( "\nIt was found the sequence of the first two characters" );
  42.     puts( "The numbers in your sequence is follows: ");
  43.  
  44.     for ( arrayCounter = 0; arrayCounter < SIZE; ++arrayCounter ) {
  45.        
  46.         if ( yourArray[arrayCounter] >= '0' && yourArray[arrayCounter] <= '9' )
  47.             printf( "%2c", yourArray[arrayCounter] );
  48.    
  49.     }
  50.    
  51.     puts( "" );
  52.  
  53.     return 0;
  54. }

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

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

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


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

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

6   голосов , оценка 3.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы