• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program odwracający ciąg znaków w C

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
1,854 wizyt
pytanie zadane 2 marca 2016 w C i C++ przez sebask08 Użytkownik (510 p.)
Zgłaszam sie do was z prośbą o napisanie prostego programu który będzie wczytywał z pliku jakieś zdanie, następnie odwracał je i potem zapisywał odwrócone do pliku( w jezyku C). Siedze już nad tym ze 2,5h i jeszcze bym siedział ze 3h, a musze to umieć na jutro na laborki. Więc jakby ktoś miał chwile i chęci to bym był bardzo wdzięczny za przesłanie kodu. (fajnie jakby było opatrzone komentarzem, ale bez tez będzie SUPER).

2 odpowiedzi

0 głosów
odpowiedź 2 marca 2016 przez Krawiec91 Pasjonat (19,600 p.)
Z czym masz dokładnie problem w tym programie, że przez 2.5h za wiele się nie urodziło?
komentarz 2 marca 2016 przez sebask08 Użytkownik (510 p.)
Stanęło na tym ze wypisuje mi ciąg znaków z pliku ale nie moge go odwrócić tak zeby cały sie odwrócił włącznie ze spacjami .
komentarz 2 marca 2016 przez Krawiec91 Pasjonat (19,600 p.)
Pokaż kod, to będzie można coś więcej powiedzieć, dlaczego nie działa.
komentarz 2 marca 2016 przez sebask08 Użytkownik (510 p.)
Nie mam sensu bo totalnie nie mam pomysłu jak to zrobić zeby działało. Może masz jakąś koncepcje?
komentarz 2 marca 2016 przez sebask08 Użytkownik (510 p.)
#include <stdio.h>
#include <stdlib.h>

int main()
{

    FILE *plik;
    char tekst[128];
    plik = fopen("SUPER.txt", "r");

    if(!plik)
    {
        printf("brak pliku");
        return EXIT_FAILURE;
    }

    while(feof(plik)==0)
    {
        fscanf(plik, "%s", tekst);
        printf("%s ", tekst);

      }

 

  
    return 0;
}

 

Tyle mam czyli nie dużo bo to co porpzednio pisałem nei miało sensu.
komentarz 2 marca 2016 przez Krawiec91 Pasjonat (19,600 p.)
Wczytywanie zdań (wyrazy i spacje pomiędzy nimi) za pomocą fscanf() to kiepski pomysł, bo dane wczytywane są do pierwszego białego znaku (np. spacji). Do wczytywania całej linii tekstu (łącznie ze spacjami) użyj funkcji fgets().
http://www.cplusplus.com/reference/cstdio/fgets/
0 głosów
odpowiedź 2 marca 2016 przez Patrycjerz Mędrzec (192,320 p.)

Wczytaj tekst z pliku do tablicy, stwórz nową tablicę i przepisuj litery ze starej tablicy do nowej (ostatni element starej tablicy do pierwszego elementu nowej itd.), aż nie dojdziesz do końca tekstu (skorzystaj z funkcji strlen). Na końcu zapis do pliku.

1
komentarz 2 marca 2016 przez Krawiec91 Pasjonat (19,600 p.)
Albo zrobić to na jednej tablicy, wczytać do niej znaki z pierwszego pliku. I wypisać znaki z tablicy od końca, do drugiego pliku za pomocą fputc().
komentarz 2 marca 2016 przez Patrycjerz Mędrzec (192,320 p.)
Tak, oczywiście i nawet twój sposób będzie lepszy od mojego (mniejsze zużycie pamięci).
komentarz 2 marca 2016 przez sebask08 Użytkownik (510 p.)
Dzięki wielkie za poświecony czas, program napisałem:

/* fgets example */
#include <stdio.h>

int main()
{FILE *plik;
   FILE * pFile;
   char mystring [100];
   pFile = fopen ("myfile.txt" , "r");
   if (pFile == NULL) perror ("Error opening file");
   else {
     if ( fgets (mystring , 100 , pFile) != NULL )
       puts (mystring);
     fclose (pFile);
   }

    strrev(mystring);

    printf("Reverse\n%s\n", mystring);

 

    plik = fopen("test.txt", "w");

    fprintf(plik, "%s", mystring);

    fclose(plik);

 

   return 0;
}

Jeszcze tylko musze to przeanalizować(bo za wiele nie czaje z tego) albo napisać od nowa wykorzystując rade "patrycjerza". Jaka jest wasza opinie odnosnie tego kodo nadaje sie na coś wgl?
komentarz 2 marca 2016 przez Patrycjerz Mędrzec (192,320 p.)

No cóż... można i tak wink

komentarz 2 marca 2016 przez Krawiec91 Pasjonat (19,600 p.)
Nobla za ten kod to nie dostaniesz.;) hehe
Program jak program, mam wątpliwości do tej funkcji strrev(), czy to wszędzie zadziała. Jak mnie pamięć nie myli, to nie jest funkcja z biblioteki standardowej języka C. Jak zadziała to spoko. Aczkolwiek to trochę droga na skróty moim zdaniem, w tak prostym programiku, żeby do takich "ulepszaszy" jak strrev() się uciekać. Można było moim sposobem albo Patrycjerza to odwracanie ogarnąć, pożytek edukacyjny byłby większy.;)
komentarz 2 marca 2016 przez sebask08 Użytkownik (510 p.)
Wiem wiem teraz to będe przepisywał tak żeby było popawnie ale jak coś człowiekowi nie wychodzi to ucieka sie do najprostszych metod :D
komentarz 2 marca 2016 przez sebask08 Użytkownik (510 p.)
edycja 3 marca 2016 przez Patrycjerz

Ten chyba lepszy co?

#include <stdio.h>

#include <stdlib.h>


FILE *plik;
FILE *plik2;

void OdwrocZdanie(char *tekst)
{
    int i=0;
    for(i=strlen(tekst)-1; i >= 0; --i)
    {
        if(tekst[i]!='\n') fputc(tekst[i], plik2);
    }
    fputc('\n', plik2);
}

int main()
{


    char tekst[128];

     if ((plik = fopen("SUPER.txt", "r")) == NULL) {
        printf("Blad otwarcia pliku %s", "SUPER.txt");
        return 1;
    }
     if ((plik2 = fopen("Jeszcze_lepiej.txt", "w")) == NULL) {
        printf("Blad otwarcia pliku %s", "Jeszcze_lepiej.txt");
        return 1;
    }

    while (fgets(tekst, 128, plik)) {
    OdwrocZdanie(tekst);
    }

    fclose (plik);
    return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 600 wizyt
0 głosów
3 odpowiedzi 1,006 wizyt
0 głosów
1 odpowiedź 697 wizyt

93,440 zapytań

142,431 odpowiedzi

322,678 komentarzy

62,802 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...