Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 7 odgovora
  • 4.427 pregleda

Najnovija ↓

[Zadatak] Redosled reci u inverznom poretku 14.02.2006. u 17:52 · pre 252 meseca
izmenjeno 1 put, poslednji put android~paranoid 14.02.2006. u 17:53
  1. android~paranoid14.02.2006. u 17:53zapis iz teksta poruke
#1
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.
Potpis
Mislim, šta reći !
Re: [Zadatak] Redosled reci u inverznom poretku 14.02.2006. u 18:08 · pre 252 meseca #2
Što ne probaš drugačije: prvo napraviš niz svih reči u tekstu, pa ih onda ispišeš od poslednjeg do prvog člana niza?
Potpis
 Certified Trainer Mojave 101 macOS Support Essentials 10.14
http://www.adamov.co.rs http://milan.adamov.rs http://www.infinitum.rs
Re: [Zadatak] Redosled reci u inverznom poretku 14.02.2006. u 18:24 · pre 252 meseca
izmenjeno 1 put, poslednji put android~paranoid 14.02.2006. u 18:25
  1. android~paranoid14.02.2006. u 18:25zapis iz teksta poruke
#3
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.
Potpis
Mislim, šta reći !
Re: [Zadatak] Redosled reci u inverznom poretku 15.02.2006. u 12:44 · pre 252 meseca #4
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.
Potpis
 Certified Trainer Mojave 101 macOS Support Essentials 10.14
http://www.adamov.co.rs http://milan.adamov.rs http://www.infinitum.rs
Re: [Zadatak] Redosled reci u inverznom poretku 15.02.2006. u 16:31 · pre 252 meseca #5
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.
Re: [Zadatak] Redosled reci u inverznom poretku 15.02.2006. u 22:11 · pre 252 meseca #6
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;
}
Re: [Zadatak] Redosled reci u inverznom poretku 16.02.2006. u 14:13 · pre 252 meseca
izmenjeno 1 put, poslednji put android~paranoid 16.02.2006. u 14:15
  1. android~paranoid16.02.2006. u 14:15zapis iz teksta poruke
#7
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.
Potpis
Mislim, šta reći !
Re: [Zadatak] Redosled reci u inverznom poretku 16.02.2006. u 17:25 · pre 252 meseca #8
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
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme