[ create a new paste ] login | about

Link: http://codepad.org/Sk44wFEJ    [ raw code | fork ]

C, pasted on Jan 16:
#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;
}


Create a new paste based on this one


Comments: