Forum Apl Inf
Would you like to react to this message? Create an account in a few clicks or log in to continue.

Spojení textových řetězců

2 posters

Goto down

Spojení textových řetězců Empty Spojení textových řetězců

Příspěvek pro Labonek Karel 14/12/2014, 13:11

Nazdar, hele myslel jsem že o to nepožádám, ale mohl bys mě pomoc se spojením řetězců ? Jsem ve skluzu a to mám ještě dělat ty zápočtové do Paradigmat pale

Labonek Karel

Poèet pøíspìvkù : 27
Join date : 06. 12. 14

Návrat nahoru Goto down

Spojení textových řetězců Empty Re: Spojení textových řetězců

Příspěvek pro adam.korinek 14/12/2014, 17:31

Tady je muj kod
Vysvetleni

1) zjistis velikost 1 stringu a 2 stringu
2) naalokujes pamet pro string s velikosti obou dvou predchozis + 1 jako ukoncovaci znak '\0'
3) nejakym cyklem prekopirujes z dvou stringu do vysledneho, asi pro tebe bude jednodusi ten for cyklus
4) vypises a uvolnis pamet

Good Luck :-)


kód:


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

#define BUFFER 512

//c++
//const int BUFFER = 512;

char* concat ( char* ch1, char* ch2 );

int main ( int argc, char** argv )
{
 printf ( "Exercise 9.2\n" );
 char word1[BUFFER] = {0};
 char word2[BUFFER] = {0};
 
 printf ( "Enter first word: " );
 fgets ( word1, BUFFER, stdin );
 word1[strlen ( word1 ) - 1] = '\0'; //remove \n
 
 printf ( "Enter second word: " );
 fgets ( word2, BUFFER, stdin );
 word2[strlen ( word2 ) - 1] = '\0'; //remove \n
 
 char* result = concat ( word1, word2 );
 printf ( "Result of concating words '%s' and '%s' is '%s'\n", word1, word2, result );
 free ( result );
 getchar();
 return 0;
}

char* concat ( char* ch1, char* ch2 )
{
 int l1 = strlen ( ch1 );
 int l2 = strlen ( ch2 );
 char* word = NULL;
 word = ( char* ) malloc ( l1 + l2 + 1 );
 if ( !word ) {
 printf ( "Memory could not be allocated...\n" );
 exit ( EXIT_FAILURE );
 }
 char * temp = word;
 while ( *ch1 ) {
 *temp++ = *ch1++;
 }
 while ( *ch2 ) {
 *temp++ = *ch2++;
 }
 //option B
 /*  int i;
    for(i = 0; i < l1; i++) {
            word[i] = ch1[i];
        }
    int k;
    for(i = l1, k = 0; i < (l1 + l2); i++, k++) {
            word[i] = ch2[k];
 }*/
 *temp = '\0';
 return word;
}


adam.korinek

Poèet pøíspìvkù : 25
Join date : 18. 11. 14

Návrat nahoru Goto down

Spojení textových řetězců Empty Re: Spojení textových řetězců

Příspěvek pro Labonek Karel 14/12/2014, 17:51

Opět děkuji!!! za tvůj čas mrknu se na to a dám vědět jak to dopadlo dík. :-)


Labonek Karel

Poèet pøíspìvkù : 27
Join date : 06. 12. 14

Návrat nahoru Goto down

Spojení textových řetězců Empty Re: Spojení textových řetězců

Příspěvek pro Labonek Karel 14/12/2014, 21:18

Tak takhle jsem to zmastil :-)

/*dynamicka prace s pameti spojeni textovych retezcu*/
#include <stdio.h>
#include <stdlib.h>

char* spojeni (char*, char*);

int main()
{
char t1[10], t2[10];
printf("Vlozte prvni text:"); gets(t1);
printf("\n");
printf("Vlozte druhy text:"); gets(t2);
printf("\n");

char* v = spojeni(t1, t2);
printf("Spojeni slova '%s' a '%s' je '%s'\n",t1,t2,v);
return 0;
}

char* spojeni (char *t1, char *t2){
char * spoj;
if ((spoj = (char *) malloc(20)) == NULL){
printf("Malo pameti\n");
return 0;
}

char *t3 = spoj;
while(*t1){
*t3++ = *t1++;
}
while(*t2){
*t3++ = *t2++;
}
*t3 = '\0';
return spoj;
}


Děkuji za rady !!! :-)

Labonek Karel

Poèet pøíspìvkù : 27
Join date : 06. 12. 14

Návrat nahoru Goto down

Spojení textových řetězců Empty Re: Spojení textových řetězců

Příspěvek pro adam.korinek 15/12/2014, 07:17

Pripominky:
1) Nepouzivej gets(); je sice pohodlnejsi ale nema kontrolu pro to kdyz zadas delsi string nez mas velikost char[].
2) Po alokovani pameti, neuvolnujes pamet...bude se to delat v main()
3) if ((spoj = (char *) malloc(20)) == NULL) - tento radek je sice spravne a je moc pekny, ale pochybuju ze se dobre cte, nevim jestli tohle beres z netu nebo z knizek, nebo jestli to vymyslis sam, ale temto slozitostem se zkus asi vyhnout...radsi to napis na 2 radky...

adam.korinek

Poèet pøíspìvkù : 25
Join date : 18. 11. 14

Návrat nahoru Goto down

Spojení textových řetězců Empty Re: Spojení textových řetězců

Příspěvek pro Labonek Karel 15/12/2014, 07:48

Dobré ráno, děkuji za připomínky. Jak bude čas tak se na to mrknu. Po alokovaní paměti uvolnit pamet, to chápu, ale další věci musím promislet (nastudovat) no a já dnes musím začít s těma paračema takže me toho čeká fakt dost tak uvidím :-) .

PS: dík!!!

Labonek Karel

Poèet pøíspìvkù : 27
Join date : 06. 12. 14

Návrat nahoru Goto down

Spojení textových řetězců Empty Re: Spojení textových řetězců

Příspěvek pro Sponsored content


Sponsored content


Návrat nahoru Goto down

Návrat nahoru


 
Povolení tohoto fóra:
Nemůžete odpovídat na témata v tomto fóru