如何使用这些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
}
答案 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;
}