Member 12819728 Ответов: 2

Обработка текста. Удаление слов, не начинающихся с гласных


Я читаю содержимое из файла, который будет считан в массив символов в C. Как я могу удалить слова, которые находятся в верхнем регистре // или которые начинаются с не гласной? Я действительно не могу понять, как сохранить последний c ==> Как проверить, есть ли у вас пробел перед гласной.

int main ()
{
    FILE* read_me = fopen("x.txt", "r");
    if (!read_me)
    printf ("NERA");
    FILE* write_me = fopen("y.txt", "w");
    char c;
    while ((c=fgetc(read_me)) != EOF && c != EOF)
    if(trink(c) == 0)
    {
        fputc(c, write_me);
    }
    {
        XXX
    }
    fclose (read_me);
    fclose (write_me);
}

int trink (char w)
{
    switch(w) {
    case 'a':
    case 'A':
    case 'e':
    case 'E':
    case 'i':
    case 'I':
    case 'o':
    case 'O':
    case 'u':
    case 'U':
      return 1;
    default:
      return 0;
}
}


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

XXX часть неизвестна. Не могли бы вы помочь мне решить эту проблему?

Chris Maunder

Забудьте на мгновение о кодировании, вы пробовали решить эту проблему на бумаге?

2 Ответов

Рейтинг:
1

CPallini

Простым решением было бы использование переменной, содержащей текущее состояние как

  1. Обработка допустимого слова.
  2. Обработка заготовок.
  3. Обработка К-быть-пропущенных слова.

Затем, основываясь на текущем состоянии и следующем символе, ваша программа может правильно установить, что делать.


Member 12819728

Я не могу понять, как проверить следующий символ, не разрушая систему

jeron1

Как уничтожить систему? У вас есть состояние, основанное на символе, который вы только что прочитали. Вы читаете следующий символ и решаете, что делать, основываясь на состоянии. Как только вы решите, что делать, и обработаете этот символ,вы увидите, нужно ли менять состояние. Затем процесс начинается с чтения следующего символа.

Member 12819728

Не могли бы вы помочь мне закончить этот код?

jeron1

Звучит так, как будто вы не понимаете задействованного алгоритма. Возможно, сначала напишите псевдокод (не очень подробный или зависящий от кода) или создайте блок-схему, а затем попробуйте закодировать ее.

0. установите состояние = PROCESSING_BLANKS.
1. Прочитайте символ.
один. Если состояние = = PROCESSING_BLANKS, (если нет, перейдите к #2)
a. является ли символ = = пустым?, если это так, вернитесь к #1
Б. является ли символ = = гласным? если это так, установите state = = PROCESSING_VALID_WORD, вернитесь к #1.
символ c не является гласным, установите состояние PROCESSING_WORD_TO_BE_SKIPPED, вернитесь к #1.

2. Если состояние = = PROCESSING_VALID_WORD, если нет, перейдите к #3.
a. is character = = BLANK, если это так, запишите символ и установите состояние PROCESSING_BLANKS, вернитесь к #1.
Б. если символ != пустой, запишите его и вернитесь к #1.

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

Рейтинг:
0

Member 12819728

Да, действительно, по моему мнению, я должен найти гласную, и если у нас есть пространство перед ней, то это правда, когда мы пропускаем все до другого пространства. И этот процесс непрерывный


jeron1

Как насчет того, чтобы найти пробел, а затем проверить, есть ли после него гласная?

Member 12819728

Но как проверить, есть ли гласная после?

jeron1

Прочитайте следующий символ (при условии, что он есть). Смотрите пост CPallini для хорошего и прямого предложения. Однако кодирование будет иметь другое значение, основываясь на том, что вы опубликовали. По возможности делайте небольшие шаги и используйте отладчик, чтобы увидеть, что делает ваша программа. В лучшем случае трудно отлаживать свой код без него.