читать текст из файла - PullRequest
0 голосов
/ 19 мая 2009

Я хочу прочитать текст из файла. Например: HHEEHEHHEEHHHEEEHHHEEHEHHEHEEEEEEHHHHEEE

И я хочу посчитать, сколько "Е" на каждый 5-й символ?

Ответы [ 4 ]

7 голосов
/ 19 мая 2009

Шаг за шагом.

Вам необходимо:

  1. Открыть файл
  2. чтение данных из файла
  3. получить каждый 5-й символ
  4. Увеличить счетчик, если этот символ - E.

Итак, сначала решите часть первую, затем часть вторую и так далее. Если у вас есть какие-либо проблемы на данном этапе, опубликуйте здесь некоторый код с описанием того, что вы ожидаете увидеть и что вы видите, и мы поможем вам.

3 голосов
/ 19 мая 2009
#!/bin/ksh
E=`echo "HHEEHEHHEEHHHEEEHHHEEHEHHEHEEEEEEHHHHEEE" | cut -c 5,10,15,20,25,30,35,40 | sed 's/[^E]//g'`
echo ${#E}

Это научит тебя задавать специфический вопрос.

;-) Кит.

3 голосов
/ 19 мая 2009

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

Вам нужно инициализировать как переменную позиции, так и переменную счетчика до 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-й позиции символа.
  • " " для всего остального.
3 голосов
/ 19 мая 2009

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

...