Поскольку это звучит как домашнее задание, это алгоритмы только от меня.
Вам нужно инициализировать как переменную позиции, так и переменную счетчика до 0, а затем начать считывать символ за символом (с каждым символом, увеличивающим переменную позиции).
Чтение символов означает открытие файла один раз, затем выполнение цикла для каждого чтения, а затем закрытие файла после обнаружения конца файла.
Всякий раз, когда символ «E» и , переменная позиции кратна пяти, увеличивая счетчик.
Как только все символы будут прочитаны, выведите количество.
Обновление:
Как и просили, вот код, который демонстрирует, что я имел в виду. Поскольку вы не указали, что пробовали самостоятельно, я сделал это, используя стандартный C, а не C ++, и не добавил никаких комментариев.
Но я добавил достаточно отладочной информации, чтобы вы могли видеть, что я имел в виду в выходных данных (см. Ниже). У вас еще есть работа, чтобы понять это, но, если вы опубликуете свои собственные попытки, вы получите гораздо больше помощи.
Пожалуйста, не пытайтесь выдать эту работу за свою. Ваши преподаватели, несомненно, смогут увидеть этот код так же, как и вы (следовательно, вы потерпите неудачу , если это действительно классная работа), и вы должны использовать конструкции C ++ для ввода и вывода (iostreams, а не stdio.h) .
#include <stdio.h>
char buff0[1000];
char buff1[1000];
int main (int argc, char *argv[]) {
FILE *fin;
int chPos;
int chVal;
int count;
fin = fopen ("qq.in", "r");
if (fin == NULL) {
fprintf (stderr, "Cannot open qq.in\n");
return 1;
}
*buff0 = '\0';
*buff1 = '\0';
count = 0;
chVal = fgetc (fin);
chPos = 0;
while (chVal != EOF) {
putchar (chVal);
sprintf (&(buff1[strlen(buff1)]),"%c",chPos+'1');
if ((chPos == 4) && (chVal == 'E')) {
sprintf (&(buff0[strlen(buff0)]),"%c",'*');
count++;
} else {
if (chPos == 4) {
sprintf (&(buff0[strlen(buff0)]),"%c",'|');
} else {
if (chVal == 'E') {
sprintf (&(buff0[strlen(buff0)]),"%c",'-');
} else {
sprintf (&(buff0[strlen(buff0)]),"%c",' ');
}
}
} chVal = fgetc (fin);
chPos = (chPos + 1) % 5;
}
printf ("%s\n",buff0);
printf ("%s\n",buff1);
fclose (fin);
printf ("There were %d occurrence(s)\n", count);
return 0;
}
Вот вывод:
HHEEHEHHEEHHHEEEHHHEEHEHHEHEEEEEEHHHHEEE
--|- -* -*- *- - |- --*--- | --*
12345123451234512345123451234512345123451
There were 5 occurrence(s)
Это был единственный файл с именем qq.in
, который содержал вашу входную строку "HHEEHEHH..."
. Символы во второй строке:
"-"
для E
не в 5-й позиции символа.
"|"
для позиции 5-го символа, которая не является E
.
"*"
для E
в 5-й позиции символа.
" "
для всего остального.