2013-11-17 3 views
-1

Я пытаюсь создать программу, которая читает текст из файла, который был ранее создан, инвертирует его и записывает в другой файл. Код, который у меня есть, теперь позволяет мне инвертировать отдельные слова, но останавливается всякий раз, когда есть пробел или абзац. Я мог бы использовать некоторую помощь в преодолении этой проблемы. Это код, который у меня есть до сих пор:Обратный String C

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    int c, d; 
    FILE *fich1, *fich2; 
    char string [100], *inicio, *fim, tempo; 

    fich1 = fopen("FicheiroInicial.txt", "rt"); 
    if (fich1 == NULL) 
    { 
     printf ("Erro - Nao foi possivel abrir o ficheiro\n"); 
     return (-1); 
    } 
    fscanf (fich1, "%s", string); 
    fclose (fich1); 
    inicio = string; 
    fim = inicio + strlen(string) - 1; 

    while (fim > inicio) 
    { 
     tempo = *inicio; 
     *inicio = *fim; 
     *fim = tempo; 

     ++inicio; 
     --fim; 
    } 

    fich2 = fopen("FicheiroFinal.txt", "wt"); 
    fprintf (fich2, "%s", string); 
    fclose (fich2); 
    printf ("%s", string); 

    return 0; 
} 

Заранее благодарен!

+0

Попробуйте 'fgets' вместо' fscanf'. – Arkku

+0

Спасибо! Я использовал fgets вместо fscanf, и теперь я могу инвертировать целые строки текста, даже с пробелами. У меня все еще такая же проблема, когда строка заканчивается в файле. Есть идеи? – FranciscoS

+0

Какая у вас проблема? Вы хотите, чтобы последний байт файла отображался первым, а первый - последним? Если это так, вам нужно либо прочитать весь файл в памяти, отменить весь блок памяти, и записать его в пункт назначения (для файлов размером до нескольких гигабайт), либо вам нужно прочитать файл в кусках от конца: искать подходящее смещение от конца, читать фрагмент, отменить его, записать обратные данные и повторить. –

ответ

0

Я верю, что fscanf() даст вам только слово за раз. вам нужно будет перебирать его до тех пор, пока он не вернет EOF (конец файла)