我想写的程序读取一个加密的单词并翻译它。首先,它创建一个5x 5的二维数组,将字母a到z放入单元格中,除了字母j。然后,它读取一串一次包含2个数字的数字对,用符号“-”分隔它们。(字符串不允许有任何超过24个字符)。程序得到字符串后,将其分解,使指针一次得到一对2个数字,并在atoi的帮助下,它把这个对变成一个int。然后我们把这个对分解成两个不同的数字。第一个数字代表我们要找的字母所在的二维数组的行,第二个数字代表我们要找的字母所在的二维数组的堆。然后程序得到这些坐标,找到
如果用户键入的数字超过了二维数组的容量,程序应该写回“超出界限”,如果用户键入的是字母而不是数字,程序应该写回“无法解码”。
加密字示例:
12-04-20-20-23 = Hello
我们创建的二维数组:
X 0 1 2 3 4
0 a b c d e
1 f g h i k
2 l m n o p
3 q r s t u
4 v w x y z
对不起,我的英语,我尽力解释它。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
int i,j;
char k='a', arr[5][5];
for (i=0; i<=4; i++)
{
for (j=0; j<=4; j++)
{
arr[i][j]= k;
k= ++ k;
if(k=='j')
k= ++k;
}
}
char str[74], *p, *h;
gets(str);
p=strtok(str,"-");
h=strtok(str,"-");
while(p!=NULL)
{
if(atoi(p)/10>4||atoi(p)%10>4)
{
printf("Out of bounds");
return 0;
}
else if (isalpha(*p))
{
printf("Unable to decode");
return 0;
}
p=strtok(NULL,"-");
}
while(h!=NULL)
{
printf("%c", arr[atoi(h)/10][atoi(h)%10]);
h=strtok(NULL,"-");
}
return 0;
}
例如:12-04-20-20-23
必须给予'hello'
而是返回'h'
12-61
必须给予:"Out of bounds"
回馈h
1条答案
按热度按时间tsm1rwdh1#
strtok
修改输入字符串,并且只能在给定的输入上使用一次。