Перевернуть строки - C (СИ)
Формулировка задачи:
Ребят,срочно нужно разобраться с прогой,завтра уже сдаю,а понять не могу,подскажите кто что может.
Необходимо перевернуть все слова в строках,но так,чтобы
каждое из них осталось на своем месте
,до чего я никак не могу додуматься. вот что надумал#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main()
{unsigned char *s1, *s2, *s3;
FILE *f1, *f2;
int j=0;
s1 = (unsigned char *) malloc (sizeof (unsigned char)*256);
s2 = (unsigned char *) malloc (sizeof (unsigned char)*256);
s3 = (unsigned char *) malloc (sizeof (unsigned char)*256);
if( ( f1 = fopen("input.txt", "rt") ) == NULL )
{
fprintf ( stderr, "Cannot open\n");
system ("pause");
return 1;
}
f2=fopen ("input1.txt", "wt");
while (fgets ((char *)s1,255,f1)){
for (int i=0; i<strlen((char *)s1); i++)
if (isprint(s1[i]))
s2[j++]=s1[i];
s2[j]='\0';
j=0;
for (int i=strlen((char *)s2)-1; i>=0; i--)
s3[j++]= s2[i];
s3[j]='\0';
}
fputs((char *)s3,f2);
fprintf (f2, "\n\n");
fclose (f1);
fclose (f2);
f1=fopen ("input.txt", "rt");
f2=fopen ("input1.txt", "at");
fprintf (f2, "\n\n");
free(s1);
free(s2);
free(s3);
return 0;
}Решение задачи: «Перевернуть строки»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(){
char *p;
char *s1=(char*)malloc(sizeof(char)*256);
char *s2=(char*)malloc(sizeof(char)*256);
FILE *f1=fopen("input.txt","rt");
FILE *f2=fopen("input1.txt","wt");
s1[0]=s2[0]='\0';
if((!f1)||(!f2))
return 1;
while (fgets(s1,255,f1)){
s2[0]='\0';
strcpy(s2,s1);
if (p=strtok(s2," \n\t"))
do{
strrev(p);
fprintf(f2,"%s ",p);
} while ((p=strtok(NULL," \n\t"))!=NULL);
fprintf(f2, "\n");
s1[0]='\0';
}
fclose(f1);
fclose(f2);
free(s1);
free(s2);
return 0;
}
Объяснение кода листинга программы
Этот код на языке C переворачивает строки в файле input.txt и записывает результат в файл input1.txt. Вот список действий, которые выполняет код:
- Подключает необходимые библиотеки.
- Выделяет память под две строки (s1 и s2) и открывает два файла (f1 и f2).
- Устанавливает начальный символ в обоих строках в нулевой символ.
- Проверяет, открылись ли файлы корректно. Если нет, программа завершается.
- Чтение происходит из файла
input.txtи записывается в строку s1. - Строка s2 инициализируется как копия строки s1.
- Если в строке s2 есть пробелы, они удаляются.
- Строка s2 переворачивается с помощью функции strrev.
- Перевернутая строка s2 записывается в файл
input1.txt. - В конце каждой строки записывается символ новой строки.
- После чтения и записи всех строк, файлы закрываются.
- Выделенная память освобождается.
- Программа возвращает 0, если все действия выполнены корректно.