[ android~paranoid @ 14.02.2006. 16:52 ] @
Zadatak: Unete reci treba napisati u inverznom poretku.
Primer: "ne mogu da napravim" treba da se dobije "napravim da mogu ne".
Ideja: Napravim f-ju koja vraca poslednju prazninu(u ovom primeru ce biti u prvom pokusaju izmedju da i napravim), i onda stavim tu '\0' i pok+1 sa strcat nadovezujem na prvo prazan niz.
Realizacija:
Citat:

char *praznina(char *s)
{int i=0;
i=strrlen(s)-1;
while (*(s+i)>=0)
{
if (*(s+i)==' ')
return (s+i);
i--;
}
return NULL;
}

Citat:

main
...
char *pok,*a,*s,unos[100],m[100];
a=m;
printf...
gets(unos);
s=unos;
pok=praznina(s);
while (pok!=NULL)
{ *pok='\0';
strcat(a,pok+1);
strcat(a," ");
pok=praznina(s);
}
puts (a);
...


Ovako izgleda odprilike, ali mi vrti petlju stalno, ne radi. Moze li neko da analizira, da vidim gde sam pogresio.

[Ovu poruku je menjao android~paranoid dana 14.02.2006. u 17:53 GMT+1]
[ madamov @ 14.02.2006. 17:08 ] @
Što ne probaš drugačije: prvo napraviš niz svih reči u tekstu, pa ih onda ispišeš od poslednjeg do prvog člana niza?
[ android~paranoid @ 14.02.2006. 17:24 ] @
Probacu i tako, znaci matricu da napravim i da trpam u a[ i ][j] dok ne dodje do ' ', onda da poveca i, i preskoci prazninu. Ako neko moze i ovaj moj pokusaj da analizira, nije mi samo cilj da uradim zadatak, vec da vidim i gde gresim.

[Ovu poruku je menjao android~paranoid dana 14.02.2006. u 18:25 GMT+1]
[ madamov @ 15.02.2006. 11:44 ] @
Citat:
Probacu i tako, znaci matricu da napravim i da trpam u a[ i ][j] dok ne dodje do ' ', onda da poveca i, i preskoci prazninu.

Nemoj samo da uzimaš prazninu kao delimiter, napravi funkciju kojoj ćeš da proslediš karakter koji je delimiter prema kome parsuješ tekst. Dobro će ti doći jednog dana za parsovanje URL-a.
[ vladab @ 15.02.2006. 15:31 ] @
Pokusaj da problem resis rekurzivno. Neka funkcija cita rec, pa neka se poziva dok ne dodje do krajka recenice, pa neka ispisuje tu istu rec.
[ idb @ 15.02.2006. 21:11 ] @
Za izdvajanje reci imas vec gotovu funkciju u C stabdardnoj biblioteci ( string.h ). To je char * strtok ( const char * string, const char * delimiters );
Pogledaj ovaj primer na http://www.cplusplus.com/ref/cstring/strstr.html
Code:

// Source: www.cplusplus.com/ref/cstring/strtok.html
/* strtok example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="This is a sample string,just testing.";
  char * pch;
  printf ("Splitting string \"%s\" in tokens:\n",str);
  pch = strtok (str," ");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, " ,.");
  }
  return 0;
}
[ android~paranoid @ 16.02.2006. 13:13 ] @
Citat:
Nemoj samo da uzimaš prazninu kao delimiter, napravi funkciju kojoj ćeš da proslediš karakter koji je delimiter prema kome parsuješ tekst. Dobro će ti doći jednog dana za parsovanje URL-a.


Ovako sam kontao(bez te f-je):

Citat:

while (*p)
{if *p!=' '
{a[ i ][j]=*p;
j++;}
else
{
a[ i ][j]='\0';
++i;
j=0;}
p++;
}


I onda sam i ispis uradio nekako da proverava gde je '\0' i onda da ide u sledeci red, ali ne radi ovako. Da li mozda mora sa pokazivacem na redove matrice. Hmmm, a sve mi se cini logicnim.


[Ovu poruku je menjao android~paranoid dana 16.02.2006. u 14:15 GMT+1]
[ idb @ 16.02.2006. 16:25 ] @
Vise bih voleo da ovo resavam u C++ (string, vector), ali evo kako bi moglo u C-u (deluje mi ruzno i nepouzdano, ali radi):
Code:
#include <stdio.h>
#include <string.h>
int main (){
    char str[] ="This is a sample string,just testing.";
    char* pch;
    char words[100][255]; // stavi ovde sta hoces 
    int i, n=0;

    printf ("Splitting string \"%s\" in tokens:\n",str);
    pch = strtok (str," ");
    while (pch != NULL)  {
        strcpy(words[n++],pch);
        printf ("%s\n", pch);
        pch = strtok (NULL, " ,.");
    }

    printf("~~~~~~~~~~~\n");
    for (i=n;i>0;i--) 
        printf ("%s\n",words[i-1]);

    printf("~~~~~~~~~~~\n");
    printf ("Press ENTER to continue.\n");
    getchar (); 
    return 0;
}

Ovo je samo malo prosiren predhodni primer na koji sam te uputio.
idb