在C中生成组合

时间:2014-11-08 21:39:06

标签: c xor

所以我想要做的就是将每个字符的XOR值与列表中的其他字符相结合。例如:c ^ eb ^ a等。

#include <stdio.h>

int main()
{
    int i, j;

    const char* characters[6] = {'a', 'b', 'c', 'd', 'e', 'f'};
    for (i = 0; i < sizeof(characters) - 1; i++){
        for (j = i + 1; j < sizeof(characters); j++){
            printf("%c\n", characters[i] ^ characters[j]);
        }
    }

    return 0;
}

但是我似乎无法使用printf(),因为它在引号中输出一个字符串,而在没有时输出错误。

2 个答案:

答案 0 :(得分:0)

chars[i] ^ chars[j](不带引号)将评估为char而不是字符串,因此请尝试

char chars[] = {'a', 'b', 'c', 'd', 'e', 'f'};

...

print("%c\n", chars[i] ^ chars[j]);

答案 1 :(得分:0)

你给printf()一个字符串,即&#34; chars [i] ^ chars [j] \ n&#34;,这就是它输出字符串的原因!

  1. 您需要一个字符数组,而不是字符串,因此使用单引号 而不是在数组的初始化中加倍。
  2. 你在for循环的条件下有一个额外的括号。
  3. 您想要打印XOR的值,因此请使用%d说明符 printf()(如BLUEPIXY所说)。
  4. 将所有评论放在一起,你就会得到这个:

    #include <stdio.h>
    
    int main() {
      int i, j;
    
      char characters[6] = { 'a', 'b', 'c', 'd', 'e', 'f' };
      for (i = 0; i < sizeof(characters) - 1; i++) {
        for (j = i + 1; j < sizeof(characters); j++) {
          printf("chars[%d] ^ chars[%d] is %d\n", i, j,
                 characters[i] ^ characters[j]);
        }
      }
    
      return 0;
    }
    

    由于您需要所有组合,因此您可以查看this个答案,然后重试。 :)

    这个link提供了一个更简单和相关的答案。