Я понимаю, что вы спрашиваете. В вашем случае, если у вас есть "**"
, вы хотите заменить эти 2 символа на 'A'
. Это довольно легко сделать. Вы просто зацикливаетесь на каждом символе ввода, задерживая оценку последовательности, пока не прочитаете 2 символа (просто сохраните current
как last
в конце цикла и достаточно использовать last
в качестве флага)
Тогда, если current == last
и last == find
символ, заменить последовательность и получить следующий входной символ, в противном случае просто выведите символ last
.
Короткий пример, который переводит символ последовательности в find
в качестве первого аргумента (используя '*'
, если аргументы не предоставлены) и символ repl
в качестве второго аргумента (используя 'A'
, если аргумент не предоставлен ) будет:
#include <stdio.h>
int main (int argc, char **argv) {
int c, /* current char */
find = argc > 1 ? *argv[1] : '*', /* sequential char to find */
repl = argc > 2 ? *argv[2] : 'A', /* replacement for seq chars */
last = 0; /* previous char */
while ((c = getchar()) != EOF) { /* read each char */
if (last) { /* is last set? */
if (c == last && last == find) {/* do we have sequence? */
putchar (repl); /* output replacement */
last = 0; /* set last 0 */
continue; /* go get next char */
}
else /* otherwise */
putchar (last); /* just output last */
}
last = c; /* set last = current */
}
if (last) /* if last wasn't zeroed */
putchar (last); /* just output final char */
return 0;
}
Пример использования / Вывод
$ echo "There are two ** in the sky" | ./bin/replseqchar
There are two A in the sky
$ echo "There are two *** in the sky" | ./bin/replseqchar
There are two A* in the sky
$ echo "There are two **** in the sky" | ./bin/replseqchar
There are two AA in the sky
или с другой заменой, используя '-'
вместо 'A'
,
$ echo "There are two **** in the sky" | ./bin/replseqchar '*' -
There are two -- in the sky