Spojení textových řetězců
2 posters
Forum Apl Inf :: C
Strana 1 z 1
Spojení textových řetězců
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
Labonek Karel- Poèet pøíspìvkù : 27
Join date : 06. 12. 14
Re: Spojení textových řetězců
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 :-)
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
Re: Spojení textových řetězců
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
Re: Spojení textových řetězců
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 !!! :-)
/*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
Re: Spojení textových řetězců
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...
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
Re: Spojení textových řetězců
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!!!
PS: dík!!!
Labonek Karel- Poèet pøíspìvkù : 27
Join date : 06. 12. 14
Forum Apl Inf :: C
Strana 1 z 1
Povolení tohoto fóra:
Nemůžete odpovídat na témata v tomto fóru
|
|