#include <stdio.h>
#include <string.h>
#include <ctype.h>
unsigned int gray_code(unsigned int n)
{
return n ^ (n >> 1);
}
void binary(char *s, unsigned int n, size_t len)
{
size_t i;
for(i = 0; i < len; i++)
{
s[len - i - 1] = ((n & (1 << i)) ? '1' : '0');
}
s[len] = 0;
}
char convert(char ch)
{
if (islower(ch)) return (char)toupper(ch);
if (isupper(ch)) return (char)tolower(ch);
return ch;
}
int main(void)
{
size_t len;
char data[128], gray[128], old[128];
unsigned int i, j, n;
printf("英小文字だけからなる文字列: ");
scanf("%127s", data);
len = strlen(data);
binary(old, 0, len);
for(i = 0; i < (size_t)(1 << len); i++)
{
n = gray_code(i);
binary(gray, n, len);
for(j = 0; j < len; j++)
{
if (gray[j] != old[j])
data[j] = convert(data[j]);
}
strcpy(old, gray);
printf("%s\n", data);
}
return 0;
}