Spojovani retezce – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Spojovani retezce – C / C++ – Fórum – Programujte.comSpojovani retezce – C / C++ – Fórum – Programujte.com

 

San4er
~ Anonymní uživatel
9 příspěvků
6. 12. 2013   #1
-
0
-

Dobry vecer. Potrebuji pomoc mam 2 retezce potrebuji je spojit 

 

har* spoj_retezce(const char* retezec1, const char* retezec2){

    int  delka1 = strlen(retezec1);
    int delka2 = strlen(retezec2);
      char* retezec = (char*)malloc(strlen(retezec1) + strlen(retezec2) + 1);

    int i, k;
    for (i = 0; retezec[i] < delka1; i++) {
        retezec[i] = retezec1[i];
    }
    for (k = i; retezec2[k + i] < delka2; k++) {
        retezec[k ] = retezec2[k - i];
    }

    return retezec;
}

int main() {

     printf("%s\n", spoj_retezce("abc", "def")); // abcdef
    printf("%s\n", spoj_retezce("Anorexia ", "Nervosa")); // Anorexia Nervosa
    printf("%s\n", spoj_retezce("13", "49")); // 1349
    printf("%s\n", spoj_retezce("", "Cradle of Filth")); // Cradle of Filth
    printf("%s\n", spoj_retezce("Star", " Trek")); // Star Trek
    printf("%s\n", spoj_retezce("Almost ", "Human")); // Almost Human
    printf("%s\n", spoj_retezce("", "")); //

    return 0;
}

problema je v tom ze mne se vypisuji jeste cinske ieroglify tak nemam s tim rady delal jsem ruzne upravy ale jeste jsem na to neprisel mohli by jste mne pomoc 

Nahlásit jako SPAM
IP: 158.194.129.–
KIIV
~ Moderátor
+43
God of flame
6. 12. 2013   #2
-
0
-

minimalne absolutne nechapu, co ma znamenat ta podminka ve forech:

for (k = i; retezec2[k + i] < delka2; k++) {

co tim basnik chtel rici?

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
San4er
~ Anonymní uživatel
9 příspěvků
6. 12. 2013   #3
-
0
-

#2 KIIV
spis basni si myslel to ze se zvetsi delka ale to nejde musim to spravit ;)

Nahlásit jako SPAM
IP: 158.194.129.–
San4er
~ Anonymní uživatel
9 příspěvků
6. 12. 2013   #4
-
0
-

char* spoj_retezce(const char* retezec1, const char* retezec2){

      char* retezec = (char*) malloc(sizeof(char) * delka1  + delka2);

    int i, k;
    for (i = 0; retezec[i] != '\0'; i++) {
        retezec[i] = retezec1[i];
    }
    for (k = i; retezec2[k] != '\0'; k++) {
        retezec[k] = retezec2[k - i];
    }

    return retezec;
}

tak to mel jsem

Nahlásit jako SPAM
IP: 158.194.129.–
KIIV
~ Moderátor
+43
God of flame
6. 12. 2013   #5
-
0
-

a proc nepouzijes strcpy a strcat?

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
San4er
~ Anonymní uživatel
9 příspěvků
6. 12. 2013   #6
-
0
-

nesmime pouzivat :((

proto se obracim uz nevim co mam s tim delat potrebuji spojit 2 retezce pres cyklus 

Nahlásit jako SPAM
IP: 158.194.129.–
KIIV
~ Moderátor
+43
God of flame
6. 12. 2013   #7
-
0
-

pres jeden to nepujde

kazdopadne v te druhe ukazce ti bude chyber delka1 a delka2...

a kdyz znas delku, tak se da i vyuzit...

u prvniho cyklu staci kopirovat do < delka1 a u druheho uz to chce az do  <= delka2

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
San4er
~ Anonymní uživatel
9 příspěvků
6. 12. 2013   #8
-
0
-

char* spoj_retezce(const char* retezec1, const char* retezec2){

    int  delka1 = strlen(retezec1);
    int delka2 = strlen(retezec2);
      char* retezec = (char*) malloc(sizeof(char) * delka1  + delka2);

    int i, k;
    for (i = 0; retezec[i] < delka1; i++) {
        retezec[i] = retezec1[i];
    }
    for (k = i; retezec2[k] < delka2; k++) {
        retezec[k] = retezec2[k - i];
    }

    return retezec;
}

tak jsem napsal delku ale stejen mne vypisuji po 3 ieroglify

Nahlásit jako SPAM
IP: 158.194.129.–
KIIV
~ Moderátor
+43
God of flame
6. 12. 2013   #9
-
0
-

jaky retezec[i] < delka1 ?? 

i < delka1

retezec2[k] < delka2   je jeste horsi pitomost, protoze uz prakticky na jistotu des mimo rozsah pole, jakmile je prvni retezec aspon tak dlouhej jako druhej

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
San4er
~ Anonymní uživatel
9 příspěvků
6. 12. 2013   #10
-
0
-

char* spoj_retezce(const char* retezec1, const char* retezec2){

    int  delka1 = strlen(retezec1);
    int delka2 = strlen(retezec2);
      char* retezec = (char*) malloc(sizeof(char) * delka1  + delka2);

    int i ;
    for (i = 0; i < delka1; i++) {
        retezec[i] = retezec1[i];
    }
    for (k = i; i < delka2; k++) {
        retezec[i] = retezec2[i];
    }

    return retezec;
}

to same tiskne se 3 pismena s cislecama a nic 

Nahlásit jako SPAM
IP: 158.194.129.–
KIIV
~ Moderátor
+43
God of flame
6. 12. 2013   #11
-
0
-

i < delka2   proc zrovna i ? vzdyt jako ridici pouzivas k

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
San4er
~ Anonymní uživatel
9 příspěvků
6. 12. 2013   #12
-
0
-

aha jasnacka tak jsem pred tim pouyival aj k vsechno jsem zkousel a proste nic vzdycky mi ukazovala ieroglify 

Nahlásit jako SPAM
IP: 158.194.129.–
KIIV
~ Moderátor
+43
God of flame
6. 12. 2013   #13
-
0
-

#12 San4er
jen k taky nemuzes pouzit... a hlavne musis jet az do:   k-i <= delka ...  a taky tam mit spravne to prirazeni uvnitr cyklu...

musis tam totiz zkopirovat i ukoncovaci znak... jinak to bude vypisovat nahodne pamet, dokud to nenarazi na \0

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
San4er
~ Anonymní uživatel
9 příspěvků
6. 12. 2013   #14
-
0
-

muzes napsat nejakej priklad kdy se narozi na nulu ?? 

Nahlásit jako SPAM
IP: 158.194.129.–
KIIV
~ Moderátor
+43
God of flame
6. 12. 2013   #15
-
0
-

#14 San4er
to jsou ty hieroglyfy.. .  (kdyz se na ni nenarazi)

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
paya
~ Anonymní uživatel
22 příspěvků
7. 12. 2013   #16
-
0
-

 co treba...

char* join_two_fcking_strings(const char *s1, const char *s2)                                                          
{                                                                                                                       
    char *s = (char*)malloc(sizeof(char)*(strlen(s1)
                                         +strlen(s2)+1));        char *c = (char*)s1, *cc = s;                                                                                       
    for ( ; *c != 0; ++c, ++cc) *cc = *c;                    
    for (c = (char*)s2; *c != 0; ++c, ++cc) *cc = *c; 
    *cc = 0;                                                                                                            
    return s;                                                }          
Nahlásit jako SPAM
IP: 85.171.248.–
San4er
~ Anonymní uživatel
9 příspěvků
8. 12. 2013   #17
-
0
-

#16 paya

HEZKY

hej ty si fakt dobrej prosim te nemuzes popsat slovy co si udelal at 100 % pochopim 

Nahlásit jako SPAM
IP: 94.112.26.–
paya0
Newbie
9. 12. 2013   #18
-
0
-

#17 San4er

urcite, snad budou stacit komentare

char* join_two_strings(const char *s1, const char *s2)                                                          
{                                                  
   // alokujeme novy retezec delky "delka s1" + "delka s2" + 1 
   // (pro nulu na konci)
   char *s = (char*)malloc(sizeof(char)*(strlen(s1)+strlen(s2)+1));
   // ukazatel c budeme pouzivat jako "ukazovatko" do retezcu s1 a s2
   // ...pro zacatek ho nastavime na zacatek retezce s1
   // ukazatel cc bude ukazovat na pozici v s, kam budeme kopirovat z s1 a s2
   // ...pro zacatek bude ukazovat na zacatek s
   char *c = (char*)s1, *cc = s;
   // zkopirujeme s1 do s:
   // ...podminka *c != 0 testuje, jestli uz jsme na konci retezce s1
   // ...++c a ++cc posouva ukazatele v retezcich s1 a s
   for ( ; *c != 0; ++c, ++cc) *cc = *c;
   // zkopirujeme s2 do s:
   // ...nastavime c na zacatek s2 a stejne jako v predchozim cyklu
   //    zkopirujeme s2 do s
   for (c = (char*)s2; *c != 0; ++c, ++cc) *cc = *c;
   // nakonci predchoziho cyklu ukazuje cc jeden znak za posledni pozici
   // v s, kam jsme zkopirovali posledni znak z s2
   // na tu pozici dame ukoncovaci nulu
   *cc = 0;                                                                                                            
   // vratime ukazatel na prvni pozici v s
   return s;
}

to (char*)s1 a (char*2)s2 je tam kvuli odstraneni const z s1 a s2; uz si nepamatuju, jak se tohle v C spravne dela, ale tusim, ze asi takhle :-)

jeste by se podminka " *c != 0 " dala vymenit jednoduse za " *c ", aby se znak *c nekonvertoval na integer.

Nahlásit jako SPAM
IP: 138.63.209.–
++C > C++
KIIV
~ Moderátor
+43
God of flame
9. 12. 2013   #19
-
0
-

#18 paya
mozna by bylo lepsi udelat c taky const char *  ... menit se beztak nesmi

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
paya0
Newbie
9. 12. 2013   #20
-
0
-

#19 KIIV
ehm, jj to by bylo opravdu lepsi :-)

Nahlásit jako SPAM
IP: 138.63.209.–
++C > C++
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 35 hostů

Podobná vlákna

Spojování exe souboru — založil lexy

Strigrid spojování bunek? — založil Jerremy09

řetězce — založil ench

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý