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
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)