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

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

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

Дан текстовый файл, в каждой строке которого записано по несколько слов, разделенных пробелом. Создать новый текстовый файл, в каждой строке которого записаны слова, начинающиеся с буквы ‘a’ из соответствующей строки исходного файла. Вот,что у меня получилось,но эта программа удаляет слова,начинающиеся с буквы 'а',а мне надо наоборот-чтобы оставляла их.
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
 
int main(void)
{
    char str[100];
    char *a, *b;
    int i;
    FILE *fin, *fout;
    fin = fopen("text.txt", "rt");
    fout = fopen("text2.txt", "wt");
    if (fin == NULL || fout == NULL)
    {
        printf("Errorr");
        getch();
        return 0;
    }
    while (fgets(str, 100, fin))
    {
        for (i = 0; i < 100; i++)
            if ((str[i] == 'a' && i == 0) || (str[i] == 'a' && i > 0 && (ispunct(str[i - 1]) || isspace(str[i - 1]))))
            {
                a = str+i;
                b = a;
                while (isalpha(*b))
                    ++b;
                strcpy(a, b);
            }
                
    }
    fputs(str, fout);
    fclose(fin);
    fclose(fout);
    return 0;
 
}

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

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#define DELIM "     \n,.;:!?'"
int main()
{
    FILE *fin, *fout;
    fin = fopen("input.txt", "r");
    fout = fopen("output.txt", "w");
 
    char s[128], w[30], *p;
    while(fgets(s, 128, fin)){
        for(p = strtok(s, DELIM); p; p = strtok(NULL, DELIM)){
            strcpy(w, p);
            if(w[0] == 'a')
                fprintf(fout, "%s ", w);
        }
        fprintf(fout, "\n");
    }
    fclose(fin);
    fclose(fout);
    return 0;
}

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

В этом коде используется язык программирования C. Программа считывает содержимое текстового файла, называемого input.txt, и записывает в другой файл, output.txt, только те строки, которые начинаются с буквы 'a'. Вот список действий, которые происходят в коде:

  1. Создаются две переменные типа FILE*, которые используются для работы с файлами. fin ссылается на файл input.txt, а fout - на файл output.txt.
  2. Файл input.txt открывается для чтения с помощью функции fopen().
  3. Файл output.txt открывается для записи с помощью функции fopen().
  4. Создаются две строковые переменные типа char. s имеет размер 128 символов и используется для чтения строк из файла input.txt. w имеет размер 30 символов и используется для хранения слов, начинающихся с 'a'.
  5. Запускается цикл while, который считывает строки из файла input.txt с помощью функции fgets().
  6. Внутри цикла while запускается еще один цикл for, который ищет слова, начинающиеся с 'a', используя функцию strtok().
  7. Если слово начинается с 'a', оно копируется в переменную w с помощью функции strcpy().
  8. С помощью функции fprintf() слово записывается в файл output.txt.
  9. После каждой строки записывается символ новой строки (\n) с помощью функции fprintf().
  10. После окончания внутреннего цикла for, программа продолжает работу с следующей строкой из внешнего цикла while.
  11. После окончания внешнего цикла while, файлы закрываются с помощью функции fclose().
  12. Программа возвращает 0, что означает успешное выполнение.

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

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