Перевернуть строки - 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. Вот список действий, которые выполняет код:

  1. Подключает необходимые библиотеки.
  2. Выделяет память под две строки (s1 и s2) и открывает два файла (f1 и f2).
  3. Устанавливает начальный символ в обоих строках в нулевой символ.
  4. Проверяет, открылись ли файлы корректно. Если нет, программа завершается.
  5. Чтение происходит из файла input.txt и записывается в строку s1.
  6. Строка s2 инициализируется как копия строки s1.
  7. Если в строке s2 есть пробелы, они удаляются.
  8. Строка s2 переворачивается с помощью функции strrev.
  9. Перевернутая строка s2 записывается в файл input1.txt.
  10. В конце каждой строки записывается символ новой строки.
  11. После чтения и записи всех строк, файлы закрываются.
  12. Выделенная память освобождается.
  13. Программа возвращает 0, если все действия выполнены корректно.

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

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

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