提问人:Chris04 提问时间:11/18/2022 最后编辑:BarmarChris04 更新时间:11/18/2022 访问量:29
由于某种原因,strtok 的指针只读取第一个字符串部分,并且在分隔符应用之后,它变为 NULL
For some reason strtok's pointer reads only the first string portion and afte the delimiter appiers, it becomes NULL
问:
我想写的程序读取一个加密的单词并翻译它。首先,它创建一个 5x5 的 2d 数组,并将从 a 到 z 的字母放在单元格中,字母 j 除外。然后,它读取一串一次包含 2 个数字的对,并用符号“-”分隔它们。(字符串不允许超过 24 个字符)。程序获取字符串后,它会将其断开,以便指针一次获得 2 个数字中的一对,并在 atoi 的帮助下将这对变成一个 int。然后我们打破这对,并将其分成 2 个不同的数字。第一个数字代表我们想要的字母所在的 2d 数组的行,第二个数字表示我们想要的字母所在的 2d 数组的堆。然后程序获取这些坐标并在 2d 数组中找到与它们
相对应的字母。如果用户键入的数字大于 2d 的容量,则程序应写回“越界”,如果用户键入任何字母而不是数字,则应写回“无法解码”。
加密字示例:
12-04-20-20-23 = Hello
我们创建的 2d 数组:
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
答:
0赞
nwellnhof
11/18/2022
#1
p=strtok(str,"-");
h=strtok(str,"-");
这是行不通的。 修改输入字符串,并且只能在给定输入上使用一次。strtok
评论
0赞
Barmar
11/18/2022
您应该解释解决方案是制作输入的副本,并使用它。
评论
gets
fgets
h=strtok(str,"-");
h=strtok(NULL,"-");