C语言 由于某种原因,strtok的指针只读取字符串的第一部分,在出现分隔符后,它变为NULL

mrwjdhj3  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(71)

我想写的程序读取一个加密的单词并翻译它。首先,它创建一个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

tsm1rwdh

tsm1rwdh1#

p=strtok(str,"-");
    h=strtok(str,"-");

strtok修改输入字符串,并且只能在给定的输入上使用一次。

相关问题