在1d数组中写vigenere square

时间:2015-11-09 03:09:07

标签: c for-loop vigenere

如何使用这些for循环在1d数组中编写vigenere square。 我已经尝试了很多年,我只是无法解决它。我有一个for循环的列和高度。我有一个名为alphab的字母专用数组和一个存储大小为26 * 26的值的数组。

#include <stdio.h>
void vigsq(char *vs);

char *pVs;
char vs[100]; // 1d array of fixed size. vs = vigenere square containing 26 X 26 elements
char alphab[26]; //holds the alphabet in uppercase

int main(int argc, const char * argv[])
{
    printf("Hello\n");
    pVs = vs;

    vigsq(pVs);
    return 0;
}


void vigsq(char *vs)
{
    int i = 0;//i index
    int a = 0;//a index

    for (i = 0; i <= 25; i++) // number of row
    {
        for (a = 0; a <= 25 ; a++) // prints the columns a - z
        {

            alphab[a] = (65 + a + i);
            if (alphab[a] > 90)
            {
                alphab[a] = (65 + i);
            }

            printf("|%c|",vs[a]);
        }
        printf("\n"); // print new line
    }

    printf("\n"); // print new line
}

1 个答案:

答案 0 :(得分:1)

使用模数运算符%,这可以确保字符保持在A到Z之间的范围内。

char c = 'A' + shift % 26;

你可以将字母移到右边,一旦字母到达Z,下一个字母就是A

int main()
{
    int row, col;
    for (row = 0; row < 26; row++)
    {
        for (col = 0; col < 26; col++)
        {
            char c = 'A' + (row + col) % 26;
            printf("%c ", c);
        }
        printf("\n");
    }
    printf("\n");
    return 0;
}