2009-05-19 8 views
0

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

И я хочу подсчитать, сколько «E» на каждом пятом символе?

+0

Домашнее задание? Похоже, может быть. – ZombieSheep

+7

Попробуйте написать код самостоятельно - это не сложно - и затем задайте вопрос, если вы столкнулись с конкретной проблемой. – 2009-05-19 11:39:20

ответ

3

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

+1

Я действительно не согласен с этим ответом (недостаточно, чтобы уменьшить его, хотя). Вопросы, связанные с домашним заданием, прекрасны, если только они не «дают мне код». На самом деле у этого не было * запроса *, поэтому мы можем предположить, что вопросику нужны только указатели, а не решение. – paxdiablo

7

Сделайте это шаг за шагом.

Вам нужно:

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

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

3

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

Вам необходимо инициализировать как переменную положения, так и счетчика до 0, затем начать чтение символом по символу (с каждым символом, увеличивающим переменную положения).

Чтение символов означает открытие файла один раз, после чего выполняется цикл для каждого считывания, а затем закрытие файла после обнаружения конца файла.

Всякий раз, когда символ «E» и, переменная положения кратно пяти, увеличивайте счетчик.

После того, как все символы были прочитаны, выведите счетчик.

Update:

В соответствии с просьбой, вот код, который показывает, что я имел в виду. Поскольку вы не указали никаких признаков того, что вы пробовали это самостоятельно, я сделал это с использованием стандартного 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-го символа.
  • " " для всего остального.
+0

Можете ли вы показать мне, как это сделать? – 2009-05-21 07:50:04

3
#!/bin/ksh 
E=`echo "HHEEHEHHEEHHHEEEHHHEEHEHHEHEEEEEEHHHHEEE" | cut -c 5,10,15,20,25,30,35,40 | sed 's/[^E]//g'` 
echo ${#E} 

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

;-) Keith.

Смежные вопросы