[ R A V E N @ 24.08.2007. 08:27 ] @
E ovako - dat je slijedeći zadatak:

Napisati program koji spaja dva stringa.Npr. ako je prvi string "Argentina" a drugi "Andora" rezultat treba biti "ArgentinaAndora".Spajanje realizovati preko funkcije koja prima pokazivače na oba stringa a vraća pokazivač na rezultujući string.

Ja sam radio ovako:

Code:
#include <stdio.h>

char string1[100],string2[100];
char *spoji_stringove(char *s1,char *s2);
char *pok1,*pok2,*pok3;
main()
{
      pok1=string1;
      pok2=string2;
      pok3=string1;
      
      printf("Unijeti string 1:");
      gets(pok1);
      printf("Unijeti string 2:");
      gets(pok2);
      
      printf("Rezultat je:%s",spoji_stringove(pok1,pok2));

     printf("\n");
     system("PAUSE");
}
char *spoji_stringove(char *s1,char *s2)
{
     while(*pok1!='\0')
           *pok1++;
      pok2=pok1;

     return pok3;
}


Ali jedino što dobijem je

Code:
Rezultat je Argentina


dakle uopšte ne registruje drugi string!U čemu je problem?

Hvala svima koji pogledaju ovo!
[ X Files @ 24.08.2007. 10:07 ] @
Dakle, tebi treba implementacija standardne strcat() funkcije.

U tom slučaju: Google: "strcat implementation"

http://en.wikipedia.org/wiki/Strcat
http://discuss.joelonsoftware....ault.asp?interview.11.342614.6
[ X Files @ 24.08.2007. 11:42 ] @
A inače, ceo ovaj deo:
Code:

char *spoji_stringove(char *s1,char *s2)
{
     /*1*/
     while(*pok1!='\0')
          *pok1++;

     /*2*/
     pok2=pok1;

     /*3*/
     return pok3;
}

... je jako loš:

1. while(*pok1!='\0') *pok1++;
Ovde uvećavaš VREDNOST pok1, a cilj je uvećanje ADRESE. Dakle, treba bez zvezdice:
while(*pok1 != '\0') pok1++;
...ili samo:
while( *pok1 ) pok1++;

2. pok2=pok1;
Ovde se nije desilo kopiranje, kao što si verovatno hteo. Treba otprilike ovako:
while( *pok1++ = *pok2++ );

3. u sklopu funkcije 'pominješ' pok3 koga nema u funkciji, dakle pok3 mora biti globalan, a time ti je i dizajn loš. Treba onda ovako (poslednja linija):
return --pok1;

I tek sad videh, koristio si:
char *s1,char *s2
... kao argumente funkcije, a pristupaš pok1 i pok2. Znači, u telu f-je umesto pok1 stavljaj s1, a umesto pok2 stavljaj s2.

[ R A V E N @ 24.08.2007. 12:37 ] @
pok3 je deklariran i inicijaliziran zajedno sa pok1 i pok2.
[ X Files @ 24.08.2007. 12:46 ] @
Nisi me razumeo...
Kada projektuješ tu funkciju ("Spajanje realizovati preko funkcije koja prima pokazivače na oba stringa a vraća pokazivač na rezultujući string."), onda se polazi od pretpostavke da ta funkcija bez izmena (engl: "as is") može da se upotrebi i drugde za spajanje, a ne samo u kontekstu tvog programa. Drugim rečima, ta funkcija mora biti univerzalna i nezavisna od ostatka koda. A ti si je opteretio sa pok3, a greškom si umesto s1 i s2 koristio pok1 i pok2 unutar tela funkcije.

Na linkovima koje sam ti ostavio, imaš nekoliko impmentacija tog spajanja, tvoje je samo da se opredeliš koju ćeš uzeti.
[ X Files @ 24.08.2007. 13:02 ] @
Code:

char * spoji_stringove( char* s1, char* s2 )
{
  char *tmp = s1;
  while( *s1 ) s1++;
  while( *s1++ = *s2++ );
  return tmp;
}

ili
Code:

// wiki
char * spoji_stringove(char *dest, const char *src)
  {
    const char *p;
    char *q;

    for (q = dest; *q != '\0'; q++)
       ;

    for(p = src; *p != '\0'; p++, q++)
       *q = *p;

    *q = '\0';

    return dest;
  }
[ R A V E N @ 07.09.2007. 20:27 ] @
Da,razumijem to za funkciju.Ja sam zapravo namjeravao da pokazivač prvog niza dovedem da pokazuje na terminacioni karakter tog niza(dakle,karakter '/0'),pa da ga onda preusmjerim da umjesto na taj karakter pokazuje na prvi karakter drugog niza,ali kao što vidim,previše liberalno sam shvatio te pokazivače.

Uglavnom,zašto si gore stavio
Code:
--pok1
?
[ X Files @ 07.09.2007. 20:46 ] @
To je moja omaška.

Primeri koji verujem da rade su ovi iznad.