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

[Zadatak] Spajanje dva stringa (concat)

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Spajanje dva stringa (concat)

[ Pregleda: 6084 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

nemi

Član broj: 97695
Poruke: 4
*.cmu.carnet.hr.



Profil

icon [Zadatak] Spajanje dva stringa (concat)09.06.2006. u 19:46 - pre 217 meseci
Pozdrav !
evo mog problema pa ako možete pomoći bilo bi supeeeeeeer

Napiši funkcijski podprogram koji spaja dva stringa , char*concat ( char*dest , char*src),
dest pokazuje na početak prvog a src na početak drugog stringa.Drugi treba naljepiti na kraj prvoga a funkcija vraća pokazivač na početak stringa dobivenog spajanjem dva stringa .
Napiši i glavni program!

evo to je zadatak tnxxxxxxxxxx na bilo kakvoj pomoći!
 
Odgovor na temu

slavkot

Član broj: 18657
Poruke: 166
87.250.102.*



Profil

icon Re: [Zadatak] Spajanje dva stringa (concat)09.06.2006. u 20:17 - pre 217 meseci
Ako sam dobro skont'o, to ti je jednostavno:

Code:

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


  char*concat ( char*dest , char*src)
  {
    return strcat(dest, src);    //f-ja za povezivanje znakovnih nizova
    }


int main(int argc, char *argv[])
{
  char a[50], b[50];
  printf("Unesi prvi string: ");
  gets(a);
  printf("Unesi drugi string: ");
  gets(b);
  printf(concat(a,b));
  system("PAUSE");    
  return 0;
}
 
Odgovor na temu

nemi

Član broj: 97695
Poruke: 4
*.cmu.carnet.hr.



Profil

icon Re: [Zadatak] Spajanje dva stringa (concat)09.06.2006. u 20:25 - pre 217 meseci
hvalaaaaaaaaaaaaaaaaaaaaaaaaaaa
 
Odgovor na temu

nemi

Član broj: 97695
Poruke: 4
*.cmu.carnet.hr.



Profil

icon Re: [Zadatak] Spajanje dva stringa (concat)09.06.2006. u 20:39 - pre 217 meseci
hvala na brzini!
pa da ne postavljam novu temu ako Vam nije problem pogledat još ovaj zadatak bila bi mi velika pomoć

Napiši funkcijski podprogram koji iščitava tekstualnu datoteku "ulaz.txt" znak po znak i prepisuje je u tekstualnu datoteku "izlaz.txt" pri tome zamjenjujući mala slova velikim i obratno.
dano je
void mala_velika (FILE*in, FILE*out);
napisati i glavni program
a ovo bi moglo pomoći
FILE*fopen(const char*filename, const char*mode);
int fgetc(FILE*stream)
int fputc(int character, FILE*stream);

unaprijed zahvalnaaaaa!
 
Odgovor na temu

n1tr0
Freelance
Cortanovci / NS

Član broj: 55279
Poruke: 465
80.93.231.*

Sajt: grubicv.iz.rs


+2 Profil

icon Re: [Zadatak] Spajanje dva stringa (concat)10.06.2006. u 00:30 - pre 217 meseci
Citat:
nemi:
Napiši funkcijski podprogram koji spaja dva stringa , char*concat ( char*dest , char*src)
Citat:
slavkot: Ako sam dobro skont'o, to ti je jednostavno:
...
Code:

  char*concat ( char*dest , char*src)
  {
    return strcat(dest, src);    //f-ja za povezivanje znakovnih nizova
    }

...

Mislim da nisi dobro shvatio, jer nema svrhe pisati f-ju za vec gotovu f-ju. Ovako bi na steku zauzeo bez razloga jos 3x32bita(povratna adresa,adresa parametra1,adresa parametra2). Cilj je pretpostavljam napraviti svoju f-ju ekvivalentnu f-ji strcat, a ona bi izgledala otprilike ovako:
Code:

char *concat ( char*dest , char*src)
{
    while(*dest!='\0') dest++;  // znak '\0' oznacava kraj stringa
                                         // kada dodje do '\0' uci ce u do petlju i zameniti ga sa prvim znakom iz 2. stringa
                                         // a zatim u poslednjem prolasku kroz do petlju stavice '\0' na kraj stringa
    do{
        *dest=*src;
        dest++;
        src++;
    }
    while(*src!='\0');
    return dest;
}

Napomene: - f-ju nisam isprobao-mozda ima gresaka
- treba paziti da prostor koji zauzmete za 1. string bude dovoljan da se smesti prvi i drugi string
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: [Zadatak] Spajanje dva stringa (concat)10.06.2006. u 10:54 - pre 217 meseci
U pravu si sto se tice rjesenja zadatka: sigurno nije trebalo napraviti funkciju za spajanje stringova pomocu gotove funkcije koja spaja stringove, vec napraviti svoju verziju.
U tvom rjesenju ima par propusta, gledajuci ovako odoka:
Prvo, nemas nikakve provere na duzinu stringova. Ako se funkciji prosledi neki pokazivac na neki neispravan string, koji na svom kraju nema '/0' (znam da treba backslash umesto /, nego pisem sa nekog racunara na kom je instaliran RedHat sa nemackom tastaturom pa me mrzi da ga trazim) prepisivanje ce da se nastavi unedogled dok se ne naleti negde na taj znak u memoriji ili dok mu OS ne lupi samar.
Drugo, funkcija ti ne vraca ispravnu vrednost pokazivaca. Umesto da vrati pokazivac na pocetak stringa dest, ona ga vraca na kraj, tamo dokle si dogurao sa kopiranjem karaktera. Na pocetku funkcije treba da se sacuva vrednost pokazivaca dest, pa da se ta sacuvana vrednost vrati, a ne ona koja je inkrementirana u funkciji.
 
Odgovor na temu

n1tr0
Freelance
Cortanovci / NS

Član broj: 55279
Poruke: 465
80.93.231.*

Sajt: grubicv.iz.rs


+2 Profil

icon Re: [Zadatak] Spajanje dva stringa (concat)10.06.2006. u 23:06 - pre 217 meseci
Citat:
Odin D.:
Prvo, nemas nikakve provere na duzinu stringova. Ako se funkciji prosledi neki pokazivac na neki neispravan string, koji na svom kraju nema '/0' (znam da treba backslash umesto /, nego pisem sa nekog racunara na kom je instaliran RedHat sa nemackom tastaturom pa me mrzi da ga trazim) prepisivanje ce da se nastavi unedogled dok se ne naleti negde na taj znak u memoriji ili dok mu OS ne lupi samar.

U pravu si, ali to je bas ono sto hocu da f-ja radi. Cilj je da f-ja radi sto brze, i sto manje memorije da koristi... Moze se napraviti i tako, ali moja f-ja predvidja da programer pre poziva f-je obradi stringove, i da joj prosledi ispravne. Uglavnom su stringovi ispravni, ali programer mora znati da prepozna kada string moze da bude neispravan i ispravi ga dodavanjem '\0' na kraj. Kada bi f-ja gledala duzinu stringa koristio bi bar jos dve mem. lokaciju za smestanje duzina stringova i jos bi trebao pozivati f-ju za odredjivanje duzine(npr. strlen), a posto je string u 90% slucajeva ispravan to bi drasticno usporilo izvrsavanje programa.

Citat:
Odin D.:
Drugo, funkcija ti ne vraca ispravnu vrednost pokazivaca. Umesto da vrati pokazivac na pocetak stringa dest, ona ga vraca na kraj, tamo dokle si dogurao sa kopiranjem karaktera. Na pocetku funkcije treba da se sacuva vrednost pokazivaca dest, pa da se ta sacuvana vrednost vrati, a ne ona koja je inkrementirana u funkciji.

U pravu si... Zaleteo sam se pa me mrzelo compile-ovati i proveriti. Evo ispravljene f-je:
Code:

char *concat (char *dest , char *src)
{
    char *str;
    str=dest;
    while(*dest!='\0') dest++;  // znak '\0' oznacava kraj stringa
                                         // kada dodje do '\0' uci ce u do petlju i zameniti ga sa prvim znakom iz 2. stringa
                                         // a zatim u poslednjem prolasku kroz do petlju stavice '\0' na kraj stringa
    do{
        *dest=*src;
        dest++;
        src++;
    }
    while(*src!='\0');
    return str;
}
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
195.252.89.*



Profil

icon Re: [Zadatak] Spajanje dva stringa (concat)11.06.2006. u 02:46 - pre 217 meseci
Code:

char* concat (char *dest, char *src)
{
    char *t = dest;
    while (*dest) dest++;
    while (*dest++ = *src++);
    return t;
}


...podrazumeva se da su dest i src terminisani sa '\0'

 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: [Zadatak] Spajanje dva stringa (concat)11.06.2006. u 08:16 - pre 217 meseci
Ako profesor [hoce da ispadne pametan i] trazi implementaciju vec gotovih resenja,
dovoljno je saznati kako se zove originalna funkcija, a zatim [se i vi napravite pametni i]
pozovite 'prijatelja' (Google):

strcat implementation

Eto, cak i Wikipedia (kao prvi odgovor) daje nekoliko resenja:
http://en.wikipedia.org/wiki/Strcat

P.S.

Inace, ima smisla prethodno pogledati kako su takve funkcije implementirane u
originalu. U praksi, probleme mogu stvoriti gluposti tipa NEPROVERAVANJA pocetih
uslova (naravno, u zavisnosti sta se trazi):

if ( str1 != str2 )
{
// ...
}

ili

if ( str1 && str2 )
{
// ...
}
 
Odgovor na temu

nemi

Član broj: 97695
Poruke: 4
*.cmu.carnet.hr.



Profil

icon Re: [Zadatak] Spajanje dva stringa (concat)11.06.2006. u 15:23 - pre 217 meseci
Bok! takve tekstualne zadatke dobijemo napisane na papirima i rješavamo ih na papiru ,tako da nemamo pristup pc -u i pri rješavanju zadatka koristiš ono što ti je zadano uz napomenu :"ne koristite scanf i printf"! mraaak
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Spajanje dva stringa (concat)

[ Pregleda: 6084 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

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