Member 13778651 Ответов: 1

Как заменить две буквы а в строке на букву"*"


Эй, ребята, так что для моего задания я должен заменить две буквы " а " на " * " из строки неизвестной входной длины В С. Проблема в том, что мне разрешено использовать только функции getchar() и putchar ().
С массивом это было бы проще, но мне даже не разрешено использовать его.

Что я уже пробовал:

#include <stdio.h>

int ch;

int main()
{
    while ((ch = getchar()) !=EOF && ch != '\n'  ) { 
        if(ch=='a'){
            if(ch=='a'){
                ch='*';
            }
        }
        putchar(ch);
    }
    putchar('\n');
    return 0;
}

1 Ответов

Рейтинг:
0

Patrice T

Этот код неправильный и его нужно переписать

if(ch=='a'){
    if(ch=='a'){
        ch='*';
    }
}
putchar(ch);

В соответствии с заданием, когда вы сталкиваетесь с "А", вы знаете, что делать, только когда вы знаете следующую букву.
Вам нужна переменная, чтобы сказать вам, есть ли у вас " а " на удержании или нет.
И вам нужно адаптировать код для обработки того, находится ли " а " на удержании или нет.
Код будет выглядеть так:
if(ch=='a'){
  if (a 'a' is on hold) {
    putchar('*');
    reset number of 'a' in hold
  }
  else {
    add a 'a' in hold
  }
}
else {
  if (a 'a' is on hold) {
    ...
  }
  ...
}

[Обновление]
Цитата:
не могли бы вы объяснить, что вы подразумеваете под "в ожидании" и "на удержании" английский не является моим родным языком

Входной сигнал образца
Input   on Hold   Output
  b                 b
  a       a
  n                 a n
  a       a
  a                 *
  a       a
  n                 a n
  a       a
  \n                a \n

Вы можете перевести 'на линии в ожидании у входа. Иначе говоря: вы не знаете, что делать с "а", пока не узнаете, есть ли второе "а".


Member 13778651

sry но я в замешательстве я никогда не слышал о терминах " in " или " on " В C. У меня есть проблемы с пониманием вашего решения-

Patrice T

Потому что это всего лишь описание, а не язык Си.

Member 13778651

так держать бы к примеру , допустим у нас есть переменная с именем проверить, чтобы сбросить число 'a' в удерживайте будет : проверить = а?

Patrice T

- значит, номер сброса "а" в удержании будет таким : проверка = а?"
check= 0 или check= false

Member 13778651

хорошо, я думаю, что почти понял один последний вопрос, не могли бы вы объяснить, что вы подразумеваете под "в ожидании" и "на удержании" английский не является моим родным языком