Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

C: opet me muce stringovi + nizovi ?????

[es] :: C/C++ programiranje :: C/C++ za početnike :: C: opet me muce stringovi + nizovi ?????

Strane: 1 2

[ Pregleda: 7211 | Odgovora: 35 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: C: opet me muce stringovi + nizovi ?????15.03.2013. u 18:41 - pre 134 meseci
Može ovako
Code (c):

#include <stdio.h>
#include <stdlib.h>

int main()
{
    const char *days[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", 0};
    int i = 0;

    printf("Tha days of week are:\n");

    while (days[i] != 0) {
        printf("\t%s\n", days[i]);
        ++i;
    }

    return EXIT_SUCCESS;
}
 

Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

EmmaR
Srbija

Član broj: 269847
Poruke: 466



+172 Profil

icon Re: C: opet me muce stringovi + nizovi ?????16.03.2013. u 16:26 - pre 134 meseci
Citat:
Nedeljko: Može ovako
Code (c):

#include <stdio.h>
#include <stdlib.h>

int main()
{
    const char *days[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", 0};
    int i = 0;

    printf("Tha days of week are:\n");

    while (days[i] != 0) {
        printf("\t%s\n", days[i]);
        ++i;
    }

    return EXIT_SUCCESS;
}
 


Taman htedoh da pitam, šta staviti kao poslednji član ovakvog niza, pa videh ovo. Pretpostavljam, da može i nešto drugo sem nule, jer nula može i da zatreba ? (samo ne: \0)
ER
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: C: opet me muce stringovi + nizovi ?????16.03.2013. u 16:32 - pre 134 meseci
Može i ovako
Code (c):

#include <stdio.h>
#include <stdlib.h>

int main()
{
    const char *days[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
    int i;

    printf("Tha days of week are:\n");

    for (i = 0; i < sizeof(days)/sizeof(const char*); ++i) {
        printf("\t%s\n", days[i]);
    }

    return EXIT_SUCCESS;
}
 

Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

EmmaR
Srbija

Član broj: 269847
Poruke: 466



+172 Profil

icon Re: C: opet me muce stringovi + nizovi ?????16.03.2013. u 22:10 - pre 134 meseci
Citat:
Nedeljko: Može i ovako
Code (c):

#include <stdio.h>
#include <stdlib.h>

int main()
{
    const char *days[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
    int i;

    printf("Tha days of week are:\n");

    for (i = 0; i < sizeof(days)/sizeof(const char*); ++i) {
        printf("\t%s\n", days[i]);
    }

    return EXIT_SUCCESS;
}
 


Ovo je mnogo bolje.
Zaboravih na sizeof, koja zna da bude nerealna. sizeof(days)/sizeof(const char*) je zbog toga da izračuna pravu dužinu niza ?

Još jedno pojašnjenje:
return EXIT_SUCCESS - znam da predstavlja da vraća uspešno obrađen kod, ima li još nešto ? "Nezavisnost" od povratnog tipa funkcije? (kako ide za neuspelo?)
ER
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: C: opet me muce stringovi + nizovi ?????16.03.2013. u 23:08 - pre 134 meseci
Citat:
Taman htedoh da pitam, šta staviti kao poslednji član ovakvog niza, pa videh ovo. Pretpostavljam, da može i nešto drugo sem nule, jer nula može i da zatreba ? (samo ne: \0)


Nula ne može da zatreba, jer ovo je niz pointera, a nula je NULL pointer koji ne može ništa drugo da znači osim nedefinisanog pointera.

Citat:
Još jedno pojašnjenje:
return EXIT_SUCCESS - znam da predstavlja da vraća uspešno obrađen kod, ima li još nešto ? "Nezavisnost" od povratnog tipa funkcije? (kako ide za neuspelo?)


EXIT_SUCCESS ima vrednost 0. Sve druge izlazne vrednosti main funkcije su greške, a ne postoji konvencija koja vrednost predstavlja koju grešku - to zavisi od programa do programa...
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: C: opet me muce stringovi + nizovi ?????16.03.2013. u 23:34 - pre 134 meseci
EmmaR, Nedeljko ti je napisao da to što hoćeš da postigneš treba da se radi na drugačiji način i u tome je potpuno u pravu.

Batrgaš se sa stringovima, a želiš da uradiš nešto što zahteva neke tehnike koje ti nisu poznate (izgleda).

Nemoj da se mučiš i da na neprimerenom zadatku vežbaš rad sa stringovima. Predlažem ti da za vežbu uradiš sledeći program:

Učitati sa ulaza liniju teksta. Reči u tekstu ispisati u obrnutom redosledu. Uzeti da su reči međusobno odvojene jednom ili više belina. Beline su znaci ' ' (razmak - space) i '\t' (horizontalni tabulator).

Primer:
ULAZ: C je lak
IZLAZ: lak je C

Kao pomoć, pretpostaviti da broj reči u ulaznom stringu nije veći od 30.
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: C: opet me muce stringovi + nizovi ?????17.03.2013. u 00:25 - pre 134 meseci
Citat:
EmmaR: Zaboravih na sizeof, koja zna da bude nerealna.

U kom smislu nerealna?
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

EmmaR
Srbija

Član broj: 269847
Poruke: 466



+172 Profil

icon Re: C: opet me muce stringovi + nizovi ?????17.03.2013. u 12:59 - pre 134 meseci
Citat:
Nedeljko: U kom smislu nerealna?

U smislu da pokazuje više nego što zaista ima članova: U navedenom primeru, dužina niza (dani u sedmici) rezultat je 28 a treba da bude 7. (sad ukapirah 7*4, prikazuje broj zauzetih bajtova).
Citat:

Učitati sa ulaza liniju teksta. Reči u tekstu ispisati u obrnutom redosledu. Uzeti da su reči međusobno odvojene jednom ili više belina. Beline su znaci ' ' (razmak - space) i '\t' (horizontalni tabulator).
Primer:
ULAZ: C je lak
IZLAZ: lak je C
Kao pomoć, pretpostaviti da broj reči u ulaznom stringu nije veći od 30.


OK, probaću. Do sada sam okretala samo numeričke nizove, znak po znak, tj. broj po broj.


ER
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: C: opet me muce stringovi + nizovi ?????17.03.2013. u 20:11 - pre 134 meseci
Upravo tako, sizeof prikazuje broj zauzetih bajtova.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

EmmaR
Srbija

Član broj: 269847
Poruke: 466



+172 Profil

icon Re: C: opet me muce stringovi + nizovi ?????17.03.2013. u 23:59 - pre 134 meseci
Djoka, u onom tvom primeru me muče tabulatori. Sve je OK dok postoji blank bar sa jedne strane tabulatora (\t), ali ako je kompletno okružen znakovima, dobijaju se zanimljivi rezultati:

Code (c):

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


int  main()
{
     char slova[] = "Ana voli Milovana, \ta \tJeca voli Pecu";
     char temp;
     int i, d, j, k=0, poc = 0;
     
     printf("\n Pre okretanja - string: %s",slova);
     
     d=strlen(slova);
     for(i=0;i<d/2;i++)
     {
          temp = slova[i];
          slova[i] = slova[(d-1-i)];
          slova[(d-1-i)] = temp;
     }
     printf("\nPosle okretanja - string: %s\n",slova);
         
     printf("\nduzina niza %d\n",d);
     for(i=0;i<d;i++)
     {
          if( slova[i] != ' ' )
          {
               if (slova[i] == '\t')
               {
                    continue; //ovo i nema neki efekat
               }
               
               //duzina reci
               poc=i;
               printf(" ...ulaz i=%d",i);
               while( slova[i] != ' ' && i<d )
               {                   
                    i++;
               }
               
               //okretanje reci
               for(j=poc,k=(i-1);j<k;j++,k--)
               {
                    temp = slova[j];
                    slova[j] = slova[k];
                    slova[k] = temp;
               }             
               
          }
          else
          {              
               continue;
          }    

     }
         
     
     printf("\nPosle okretanja reci - string: %s\n",slova);
     for(i=0;i<d;i++) printf("%2d: %c\n",i,slova[i]);

     return 0;
}
 

ER
 
Odgovor na temu

EmmaR
Srbija

Član broj: 269847
Poruke: 466



+172 Profil

icon Re: C: opet me muce stringovi + nizovi ?????18.03.2013. u 00:38 - pre 134 meseci
nasla sam isspace() umesto ispitivanja da li je prazno polje ili tabulator
ER
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: C: opet me muce stringovi + nizovi ?????18.03.2013. u 09:54 - pre 134 meseci
EmmR, ovo je najčudniji C kod koji sam ikada video, koji, nekim čudom, ipak radi. Ipak tvoj tok razmišljanja je otišao u potpuno drugom pravcu od očekivanog. Ja sam očekivao da napraviš niz stringova, nađeš pojedinačne reči koje redom kopiraš u taj niz i na kraju ispišeš reči sadržane u stringovima u obrnutom redusledu.

Takođe sam se nadao da ćeš, dok to radiš, malo da prouči string biblioteku i nađeš strtok funkciju. Sama po sebi, strtok nije naročito interesantna, ali sam hteo da ti uvedem pojam TOKENIZACIJE (razdvajanje ulaznog niza karaktera u tokene, što ti treba za tvoj projekat kalkulatora).

Evo mog rekurzivnog rešenja sa strtok.
Code (c):

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

#define DELIMITERS " \t"

void WriteRev( char* str ){
  char *strpart;

  if( (strpart=strtok( str, DELIMITERS )) == NULL ) return;

  WriteRev( NULL );
  printf("%s ", strpart);

  return;

}

int main () {
   char Ulaz[] = "String   za testiranje        obrtanja reci";

   printf("ULAZ: %s\n", Ulaz);
   printf("IZLAZ: ");
   WriteRev(Ulaz);
   printf("\n");

}
 
 
Odgovor na temu

EmmaR
Srbija

Član broj: 269847
Poruke: 466



+172 Profil

icon Re: C: opet me muce stringovi + nizovi ?????18.03.2013. u 13:15 - pre 134 meseci
Citat:
djoka_l: EmmR, ovo je najčudniji C kod koji sam ikada video, koji, nekim čudom, ipak radi. Ipak tvoj tok razmišljanja je otišao u potpuno drugom pravcu od očekivanog. Ja sam očekivao da napraviš niz stringova, nađeš pojedinačne reči koje redom kopiraš u taj niz i na kraju ispišeš reči sadržane u stringovima u obrnutom redusledu.

Takođe sam se nadao da ćeš, dok to radiš, malo da prouči string biblioteku i nađeš strtok funkciju. Sama po sebi, strtok nije naročito interesantna, ali sam hteo da ti uvedem pojam TOKENIZACIJE (razdvajanje ulaznog niza karaktera u tokene, što ti treba za tvoj projekat kalkulatora).

Evo mog rekurzivnog rešenja sa strtok.
Code (c):

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

#define DELIMITERS " \t"

void WriteRev( char* str ){
  char *strpart;

  if( (strpart=strtok( str, DELIMITERS )) == NULL ) return;

  WriteRev( NULL );
  printf("%s ", strpart);

  return;

}

int main () {
   char Ulaz[] = "String   za testiranje        obrtanja reci";

   printf("ULAZ: %s\n", Ulaz);
   printf("IZLAZ: ");
   WriteRev(Ulaz);
   printf("\n");

}
 


Mora da radi: moj kod je klasičan analogni časovnik na vrhu katedrale (sa sve zupčanincima i klatnima), a tvoj je kvarcni sat.
Prva ideja i jeste bila da prebacim u niz stringova, ali opet kod bi bio nešto između analognog i kvarcnog sata (ne bi sve bilo urađeno u dve linije). Tu se nešto zapetljah (nešto oko tipova podataka).
Znam kako funkcionišu rekurzivne funkcije (teoretski), ali ja se tu uglavnom spetljam. Može pojašnjenje? Zašto WriteRev( NULL );?
Ako ti je cilj bio i da se zadrže originalni razmaci, ovaj tvoj primer ne radi.

ER
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: C: opet me muce stringovi + nizovi ?????18.03.2013. u 13:24 - pre 134 meseci
Kod strtok funkcije se PRVI put upotrebi pokazivač na string, a posle toga se šalje NULL.

Program radi tako što u
if( (strpart=strtok( str, DELIMITERS )) == NULL )
dodeli strpart varijabli pokazivač na prvi token u ostatku linije, zatim pozove ponovo sebe , pa na kraju ispiše prvi token.

Svaki poziv funkcije WriteRev "otkida" po jednu reč iz ulaznog niza, pa sa tako skraćenim ulaznim nizom otkida sledeću reč.

Nije bio cilj zadatka da se sačuvaju razmaci, samo da se ispišu, na neki način, reči (nizovi ne-blank simbola) iz ulaznog niza koji sadrži reči razdvojene sa jednim ili više blank simbola.
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: C: opet me muce stringovi + nizovi ?????18.03.2013. u 16:31 - pre 134 meseci
Mislim da je samo zbinjuješ sa tom funkcijom. EmmaR, uradi sa niyom stringova. To je najprirodnije rešenje. Ne kažem da tvoje ne radi, ali ćeš morati da znaš klasične stvari na klasičan način.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: C: opet me muce stringovi + nizovi ?????19.03.2013. u 12:57 - pre 134 meseci
EmmaR, ovakav sam program očekivao da vidim:

Code (c):

#include <stdio.h>
#define Boolean int
#define true 1
#define false 0

int main() {
   char* wordarr[100];          // Niz pointera na stringove
   char  c;                     // Slovo na trenutnoj poziciji
   int   NumW=0, i;             // Broj nadjenih reci
   Boolean ExpectingWord = true;// Stanje automata
   char* TestStr=" jedan  \t dva  \t\t tri   \tcetiri\t";

   while( c = *TestStr ) { /* Vrti se dok ne nadjes '\0' */
   if( ExpectingWord )  // Ako ocekujem rec, onda preskacem praznine
      switch( c ) {
         case ' '  :
         case '\t' : break;
         // Ako sam stigao ovde, pamtim poziciju, pa trazim prazninu ili kraj
         default   : {ExpectingWord=false; wordarr[NumW++]=TestStr;}
      }
   else  // Trazim prvu prazninu, zamenjujem je terminatorom stringa
      switch( c ) {
         case ' '  :
         case '\t' : {ExpectingWord=true; *TestStr = '\0';}
      }
   TestStr++;
   }
   for( i=NumW-1; i>=0; i--) printf("%s ", wordarr[i]);
   printf("\n");
}
 
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: C: opet me muce stringovi + nizovi ?????

Strane: 1 2

[ Pregleda: 7211 | Odgovora: 35 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.