Mam problem z napisaniem funkcji, która dokonuje splotu dwóch stringów działając na wskaźnikach. Ma to wyglądać tak:
char *s1 = "ABC", *s2 = "abc", *s3;
s3 = splot(s1,s2); // jak napisać tę funkcję???
// s3 = "AaBbCc";
Mam problem z napisaniem funkcji, która dokonuje splotu dwóch stringów działając na wskaźnikach. Ma to wyglądać tak:
char *s1 = "ABC", *s2 = "abc", *s3;
s3 = splot(s1,s2); // jak napisać tę funkcję???
// s3 = "AaBbCc";
Napisałem taką funkcję:
char* komutuj(char *s1, char *s2)
{
char *s3,*st=s3;
while(*s1)
{
*s3++ = *s1++;
*s3++ = *s2++;
}
*s3 = NULL;
return st;
}
I ona nawet działa ale program na końcu wyrzuca mi błąd dostępu do pamięci. Chyba coś popsułem ze wskaźnikami...
EUREKA! W mojej funkcji tworzę dynamicznie string s3 o długości równej sumie długości s1 i s2:
s3 = (char)malloc((strlen(s1)+strlen(s2)-2)*sizeof(char));
a potem ucinam go gdy kończy się s1 przypisaniem:
*s3=NULL;
I teraz błąd alokacji już zniknął!
I jeszcze małe zabezpieczenie w pętli dla stringów s1 i s2 o różnej długości:
while(*s1 && *s2)
{
..........................
Wiecie co? Ta funkcja może mieć JEDEN WIERSZ KODU:
while((*s3++=*s1++) && (*s3++=*s2++)) // !!!
Na oko działa mi to poprawnie! Jeśli to dobrze to C jest PRAWIE asemblerem!!!
Myślałeś nad tym żeby zacząć prowadzić bloga? :P
Malcolm napisał(a)
Myślałeś nad tym żeby zacząć prowadzić bloga? :P
A myślałeś o tym, że już czas na złomowanie ? :P
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.