Funkcja której rezultatem jest wskaźnik na łańcu

0

Istnieje potrzeba napisać funkcje char * revupstrcpy(char * d, char * s), która kopiuje łańcuch s do łańcucha d zmieniając każdą dużą literę na małą i małą na dużą. Rezultatem funkcji jest wskażnik na łańcuch d.

0

Trochę rzutowań jest, ale dzięki temu użyte są tylko funkcje WinAPI.
[code]char* revupstrcpy(char* d, char* s)
{int i=0;
while (char c=s[i])
{if (IsCharAlpha(c))
d[i]=IsCharLower(c)?(char)CharUpper((char*)c):(char)CharLower((char*)c);
else d[i] = c;
i++;
}
d[i] = 0;
return d;
}
//----
void test()
{char* a = "aBcD01+-", b[8]; //b musi mieć rozmiar >= a
ShowMessage(revupstrcpy(b,a));
}[/code]

0

Ale jakbyś chciał w ANSI C to:

char *revupstrcpy(char *d, char *s)
{
char *p=d;

while (*s)
{
if (isalpha(*s))
*p++ = *s++ ^ 32;
else
*p++ = *s++;
}
return d;
}

[Marooned: dzięki za odświeżenie pamięci :) ]

P. S. Kod działa tylko dla liter ze standardu ASCII (czyli tylko alfabet łaciński)

1 użytkowników online, w tym zalogowanych: 0, gości: 1