#include <stdio.h>
template <size_t N>
struct StrN
{
char str[N];
static void Swap(char *p0, char *p1)
{
StrN &s0 = *(StrN *)p0;
StrN &s1 = *(StrN *)p1;
StrN tmp = s0;
s0 = s1;
s1 = tmp;
}
};
#define SWAP10(STR, IDX0, IDX1) StrN<10>::Swap(&STR[IDX0 * 10], &STR[IDX1 * 10])
int main()
{
char str[21] = {"abcdefghijABCDEFGHIJ"};
printf("Before swapping :\n%s\n\n", str);
SWAP10(str, 0, 1);
printf("After swapping :\n%s\n\n", str);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp0ZW1wbGF0ZSA8c2l6ZV90IE4+CnN0cnVjdCBTdHJOCnsKICAgIGNoYXIgc3RyW05dOwogICAgCiAgICBzdGF0aWMgdm9pZCBTd2FwKGNoYXIgKnAwLCBjaGFyICpwMSkKICAgIHsKICAgICAgICBTdHJOICZzMCA9ICooU3RyTiAqKXAwOwogICAgICAgIFN0ck4gJnMxID0gKihTdHJOICopcDE7CiAgICAgICAgU3RyTiB0bXAgPSBzMDsKICAgICAgICBzMCA9IHMxOwogICAgICAgIHMxID0gdG1wOwogICAgfQp9OwoKCiNkZWZpbmUgU1dBUDEwKFNUUiwgSURYMCwgSURYMSkgU3RyTjwxMD46OlN3YXAoJlNUUltJRFgwICogMTBdLCAmU1RSW0lEWDEgKiAxMF0pCgoKaW50IG1haW4oKQp7CgogICAgY2hhciBzdHJbMjFdID0geyJhYmNkZWZnaGlqQUJDREVGR0hJSiJ9OwoKICAgIHByaW50ZigiQmVmb3JlIHN3YXBwaW5nIDpcbiVzXG5cbiIsIHN0cik7CgogICAgU1dBUDEwKHN0ciwgMCwgMSk7CgogICAgcHJpbnRmKCJBZnRlciBzd2FwcGluZyA6XG4lc1xuXG4iLCBzdHIpOwogICAgCiAgICByZXR1cm4gMDsKfQ==