在C中使用带有两个数组的strstr方法?

时间:2017-03-10 06:11:04

标签: c arrays pointers strstr

我正在通过命令行创建一个莫尔斯代码转换器,但是在将保存用户输入的数组与保存莫尔斯代码等效的数组进行比较时遇到了麻烦。

const char *morse[SIZE] = {
"0 ----- ",
"1 .---- ",
"2 ..--- ",
"3 ...-- ",
"4 ....- ",
"5 ..... ",
"6 -.... ",
"7 --... ",
"8 ---.. ",
"9 ----. ",
"a .- ",
"b -... ",
"c -.-. ",
"d -.. ",
"e . ",
"f ..-. ",
"g --. ",
"h .... ",
"i .. ",
"j .--- ",
"k -.- ",
"l .-.. ",
"m -- ",
"n -. ",
"o --- ",
"p .--. ",
"q --.- ",
"r .-. ",
"s ... ",
"t - ",
"u ..- ",
"v ...- ",
"w .-- ",
"x -..- ",
"y -.-- ",
"z --.. ",
};


int main(int argc, char *argv[])
{
    int i=0;

for (i = argc-1; i >=0; i--)
{
    argv[i] = argv[i];
    printf("%s\n", argv[i]);
}

if (argc < 3)
{
    printf("Need atleast two arguments");
    return 0;
}

 for (int i = argc-1; i >= 0; i--)
{
    for (int ii = 0; ii <= SIZE; ii++)
    {
      char *pointer =  strstr(morse[ii], argv[i]);

      if ( pointer!=NULL)
      {
        printf("%c", *morse[ii]);
      }
    }
}

因此,如果用户输入存储在argv数组中的“.-”,我的for循环将通过莫尔斯并使用strstr查找“.-”,然后它将打印出第一个字符“一个”。  我似乎无法成功打印莫尔斯数组中的第一个字符,我猜它与strstr有关。

1 个答案:

答案 0 :(得分:1)

strstr搜索另一个字符串中出现的子字符串。因此,.-搜索成功数字1(因为.-可以找到1 .----),数字2(因为.-可以发现于2 ..---)等。

为了准确匹配.-,您需要用空格包围用户输入。在这种情况下,.-只能在a .-中找到。见标有(3)的行。

for (int i = argc - 1; i > 0; i--)     // <-- (1)
{
    for (int ii = 0; ii < SIZE; ii++)  // <-- (2)
    {
        char user_letter[8];
        sprintf_s(user_letter, sizeof(user_letter), " %s ", argv[i]); // <-- (3)
        const char *pointer = strstr(morse[ii], user_letter);         // <-- (3)

        if (pointer != NULL)
        {
            printf("%c", *morse[ii]);
        }
    }
}

与问题没有直接关系的其他要点:

  • (1) - argv[0]是调用的程序路径,因此不想将其作为用户输入进行处理
  • (2) - morse[]数组索引从零开始,因此最后一个索引为SIZE - 1而不是SIZE