Diskuze: Najdenie zadaneho retazca v súbore. C

C++ C a C++ Najdenie zadaneho retazca v súbore. C

Avatar
pixer
Člen
Avatar
pixer:

Zdravím. Jazyk C som sa začal učit pred pár dňami a práve som dokončil kapitolu so súbormi a napadlo ma , že ked do programu zadam nejake meno(string) a v súbore , ktorý je pomenovaný MENA.TXT su na 1 riadku mená presne takto :

Marek Matus Stefan Jano

tak program vypíše, či sa zadané meno v súbore MENA.TXT nachádza.

Skúsil som na to vymyslet svoj vlastný algoritmus ktorý zo zadaného mena bude porovnávať prvý znak čiže meno[0] s každým jedným písmenom v súbore a ked sa zhodujú prvé začne to porovnávať nasledujúce a za každé zhodné navýši hodnotu počítadla o 1 a ked sa p = dlzke mena a zároven na dalšej pozícií je medzera tak to meno sa tam nachádza.

while(( ch = fgetc(fr)) != EOF ) {
        k++;
        if (meno[0] == ch ){
            for (i = 0; i<= dlzka; i++ ){
                if (meno[i] = missing[k+i]) // to missing musim nahradit nejakym prikazom ktory mi nacita znak z tej pozicie
                    p++;
                else
                    p = 0;
            if (p == dlzka && missing[k+i+1] == ' ') //missing musim nahradit nejakym prikazom ktory mi nacita znak z tej pozicie
                final = 1;
            }
        }
     }

aby som to spustil a vobec overil ci to bude fungovat by som potreboval nahradit to "missing" nejakym prikazom ktory mi nacita char z tej [k+i] pozicie a porovna.

 
Odpovědět 29.7.2015 16:29
Avatar
Jozef
Člen
Avatar
Jozef:

Ak si si prešiel túto kapitolu: "2. díl - Práce s textovými soubory (txt) v jazyce C"(http://www.itnetwork.cz/…vymi-soubory), tak je tam tento kód:

char buffer[1024];
    while (fscanf(p_soubor, " %1023[^\n]", buffer) != EOF)
    {
      //......
    }

do bufferu načítaš celý riadok zo súboru, potom stačí keď takýmto spôsobom prejdeš cez buffer,napr. ak budeš vedieť aká je dĺžka riadka:

meno[] = "Matus";
int meno_dlzka = 5;
for(i = 0; i < dlzka; i++){
      if(meno[0] == buffer[i]){
         int index = i+1;
         p = 1;
         for(j = 1; j < meno_dlzka;j++){
               if(meno[j] == buffer[index]){
                 index++;
                 p++;
               }
               else
                  break;
         }
      }
      if(p == dlzka && buffer[index] == ' ')
         final = 1;
}
Editováno 29.7.2015 17:21
Nahoru Odpovědět 29.7.2015 17:20
I'm not afraid to die on a treadmill
Avatar
pixer
Člen
Avatar
pixer:

Dakujem za odpoved. Mam jednu otazku ked tam je 1 riadok tak to prebehne 1x dobre nacita to prvy riadok a vsetky mena ale stale potrebujem nejaku funkciu ktoru priradim premenj dlzka ktora mi urci dlzku toho riadku napriklad Jano Peter je na prvom riadku by mi vratilo 10 a potom to moze zacat skenovat.

 
Nahoru Odpovědět 29.7.2015 17:42
Avatar
Jozef
Člen
Avatar
Odpovídá na pixer
Jozef:

Funkcia strlen - http://www.tutorialspoint.com/…n_strlen.htm;
v tomto prípade:

dlzka_riadka = strlen(buffer);
Nahoru Odpovědět 30.7.2015 8:51
I'm not afraid to die on a treadmill
Avatar
Odpovídá na pixer
Libor Šimo (libcosenior):

Includuj knižnicu string.h a použi funkciu
char *strstr(char *s1, char *s2);
Nájde prvý výskyt reťazca s2 v reťazci s1 a vráti pointer na tento výskyt, alebo vráti NULL v prípade neúspechu.

Nahoru Odpovědět 30.7.2015 9:39
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Jozef
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
Jozef:

Samozrejme, to by bolo najlepšie riešenie, avšak podľa mňa by preňho nebolo vyhovujúce.Ako vraví, C-éčko sa začal učiť pred pár dňami, preto sa takýmto spôsobom,aký si vybral, naučí zo začiatku oveľa viac, ako iba použitím funkcii. Je ale dobré, aby vedel aj o tejto možnosti.

Nahoru Odpovědět 30.7.2015 10:01
I'm not afraid to die on a treadmill
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.