Создать новый текстовый файл, в каждой строке которого записаны слова, начинающиеся с буквы ‘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'.
Вот список действий, которые происходят в коде:
- Создаются две переменные типа FILE*, которые используются для работы с файлами. fin ссылается на файл
input.txt, а fout - на файлoutput.txt. - Файл
input.txtоткрывается для чтения с помощью функции fopen(). - Файл
output.txtоткрывается для записи с помощью функции fopen(). - Создаются две строковые переменные типа char. s имеет размер 128 символов и используется для чтения строк из файла
input.txt. w имеет размер 30 символов и используется для хранения слов, начинающихся с 'a'. - Запускается цикл while, который считывает строки из файла
input.txtс помощью функции fgets(). - Внутри цикла while запускается еще один цикл for, который ищет слова, начинающиеся с 'a', используя функцию strtok().
- Если слово начинается с 'a', оно копируется в переменную w с помощью функции strcpy().
- С помощью функции fprintf() слово записывается в файл
output.txt. - После каждой строки записывается символ новой строки (\n) с помощью функции fprintf().
- После окончания внутреннего цикла for, программа продолжает работу с следующей строкой из внешнего цикла while.
- После окончания внешнего цикла while, файлы закрываются с помощью функции fclose().
- Программа возвращает 0, что означает успешное выполнение.