Удалить все слова, начинающиеся с согласных латинских букв, из первого файла и переписать оставшиеся во второй файл - C (СИ)

Узнай цену своей работы

Формулировка задачи:

даны 2 файла. В первом текст. Удалить все слова начинающиеся с согласных латинских букв и переписать оставшиеся во второй файл. Помогите пожалуйста. Есть мысль, не знаю как записать на языке

Решение задачи: «Удалить все слова, начинающиеся с согласных латинских букв, из первого файла и переписать оставшиеся во второй файл»

textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
 
int main()
{
    FILE* fp[2] = { 0 };
    const char* filename[2] = { "input.txt", "output.txt" };
 
    if ((fp[0] = fopen(filename[0],"r")) == NULL)
    {
        printf("Unable to open file %s for reading\n",filename[0]);
        return 0;
    }
 
    if ((fp[1] = fopen(filename[1],"w")) == NULL)
    {
        printf("Unable to open file %s for writing\n",filename[1]);
        return 0;
    }
 
    char* str = new char[256];
    fgets(str, 256, fp[0]);
 
    for (int i = 0; str[i] != '\0'; i++)
        if (isspace(str[i]) || i == strlen(str)-1)
        {
            char pchars[] = "aeouiy"; int k = i-1; 
            while (str[k] != ' ' && k >= 0) k--;
            if (!strchr(pchars,tolower(str[k+1])) && isupper(str[k+1]))
            {
                int len = i-k; i = k;
                while (--len >= 0)
                {
                    for (int q = k+1; str[q] != '\0'; q++)
                        str[q] = str[q+1];
                }
            }
        }
 
    fprintf(fp[1],"%s\n",str);
 
    for (int i = 0; i < 2; i++)
        fclose(fp[i]);
 
    _getch();
 
    return 0;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы: stdio.h, conio.h, string.h, ctype.h
  2. Определяется входной параметр main() и инициализируются два указателя на файлы: fp[0] и fp[1]. Значениями этих указателей являются дескрипторы файлов, открытые для чтения и записи соответственно. Файлы, которые будут использоваться, указаны в массиве filename[].
  3. Проверяется успешность открытия файла input.txt для чтения. Если открытие не удалось, выводится сообщение об ошибке и возвращается 0.
  4. Проверяется успешность открытия файла output.txt для записи. Если открытие не удалось, выводится сообщение об ошибке и возвращается 0.
  5. Выделяется память под строку str, которая будет использоваться для чтения строк из файла input.txt.
  6. Считывается первая строка из файла input.txt в буфер str.
  7. Используя цикл for, осуществляется проверка каждой буквы в строке на предмет того, является ли она начальной буквой согласного латинского слова. Если это так, то внутренняя функция isupper() возвращает 1, что позволяет продолжить проверку. Если это не так, то внутренние функции isspace() и isupper() возвращают 0, и текущий символ заменяется на следующий.
  8. Если слово начинается с гласной буквы, то внутренняя функция isupper() возвращает 0, и текущий символ заменяется на следующий.
  9. Если слово не начинается с гласной буквы, то внутренние функции isspace() и isupper() возвращают 0, и текущий символ заменяется на следующий.
  10. Внутренний цикл for используется для удаления всех символов из строки, которые не являются начальными символами гласных слов.
  11. С помощью функции fprintf() в файл output.txt записывается обработанная строка.
  12. Используя цикл for, закрываются файлы, которые были открыты в блоке if.
  13. Запускается функция _getch(), которая ожидает нажатия клавиши.
  14. Возвращается 0, указывающий на успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.727 из 5
Похожие ответы