Вводить массив символов до тех пор, пока два последних введенных символа не будут равны двум первым - 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;
}
Объяснение кода листинга программы
- В начале определяются переменные:
firstCharactersecondCharacterpenultimateCharacteryourArray- массив символовnextCharactercounter- счетчик количества введенных символовarrayCounter- счетчик для заполнения массива
- Затем выводится сообщение с просьбой ввести последовательность символов.
- Далее идет цикл, который продолжается до тех пор, пока два последних введенных символа не будут равны двум первым.
- Внутри цикла:
- символ добавляется в массив
penultimateCharacterобновляется- если текущий символ равен первому, то
penultimateCharacterобновляется - если счетчик равен 1, то первый символ сохраняется и счетчик увеличивается
- если счетчик равен 2, то второй символ сохраняется и счетчик увеличивается
- После окончания цикла выводится сообщение о том, что найдена последовательность из первых двух символов.
- Затем выводится последовательность чисел, введенных в массив, в формате таблицы.
- В конце возвращается 0, что означает успешное завершение программы.