在数组中搜索特定的令牌/字符串C.

时间:2014-01-28 04:48:29

标签: c arrays search token

这是我的代码,我现在真的被困住了。 问题是,用户输入摩尔斯电码,然后通过标记将每个存储在一个数组上,现在我的问题是,我如何搜索我为每个标记存储特定字符串的数组?

例如,我输入了.... . .-.. .-.. --- / .-- --- .-. .-.. -..作为我的摩尔斯电码,然后将其标记化。

现在我想在数组中搜索特定字符串中的每个标记,例如:

我会搜索“....”然后如果它搜索一个,它会打印出H,依此类推,直到形成单词。

字母表中的所有字母和数字都是一样的。

    #include <stdio.h>
    #include <string.h>


    #define LIMIT 200
    int main(){
       char morse[LIMIT],*decoded[300];
       char *token;
       int i=0,c;

       printf("Enter morse code: ");
       gets(morse);

       token = strtok(morse, " ");

       while( token != NULL){

        //printf("%s\n",token);
        //strcpy(decoded[i],token);

        decoded[i++] = token;
        token = strtok(NULL, " ");

       }

       if(strcmp(decoded[i],"....")==0){
        printf("HELLO");
       };   
       //for(i=0;i<sizeof(decoded);i++){ 
       //   printf("%s\n",decoded[i]);
       //} 

       system("pause");
       return 0;
    }

修改

#include <stdio.h>
#include <string.h>


#define LIMIT 200
int main(){
char morse[LIMIT],*temp[300],decoded[LIMIT];
char *token;
int i=0,c;

printf("Enter morse code: ");
gets(morse);

token = strtok(morse, " ");

while( token != NULL){

    //printf("%s\n",token);
    //strcpy(temp[i],token);

    temp[i++] = token;
    token = strtok(NULL, " ");

}

for(i=0;temp[i]!='\0';i++){
    if(strstr(temp[i],".-")){
    printf("A");
} else if(strstr(temp[i],"-...")){
    printf("B");
}else if(strstr(temp[i],"-.-.")){
    printf("C");
}
else if(strstr(temp[i],"-..")){
    printf("D");
}
else if(strstr(temp[i],".")){
    printf("E");
}
else if(strstr(temp[i],"..-.")){
    printf("F");
}
else if(strstr(temp[i],"--.")){
    printf("G");
}
else if(strstr(temp[i],"....")){
    printf("H");
}
else if(strstr(temp[i],"..")){
    printf("I");
}
else if(strstr(temp[i],".---")){
    printf("J");
 }
else if(strstr(temp[i],"-.-")){
    printf("K");
}
else if(strstr(temp[i],".-..")){
    printf("L");
}
else if(strstr(temp[i],"--")){
    printf("M");
}
else if(strstr(temp[i],"-.")){
    printf("N");
}
else if(strstr(temp[i],"---")){
    printf("O");
}
else if(strstr(temp[i],".--.")){
    printf("P");
}
else if(strstr(temp[i],"--.-")){
    printf("Q");
}
else if(strstr(temp[i],".-.")){
    printf("R");
}
else if(strstr(temp[i],"...")){
    printf("S");
}
else if(strstr(temp[i],"-")){
    printf("T");
}
else if(strstr(temp[i],"..-")){
    printf("U");
}
else if(strstr(temp[i],"...-")){
    printf("V");
}
else if(strstr(temp[i],".--")){
    printf("W"); 
}
else if(strstr(temp[i],"-..-")){
    printf("X");
} 
else if(strstr(temp[i],"-.--")){
    printf("Y");
}
else if(strstr(temp[i],"--..")){
    printf("Z");
}else if(strstr(temp[i],"/")){
    printf(" ");

}else{
printf("ERROR");
}
//printf("%s",strstr(temp[i],"...."));
}

   //for(i=0;i<sizeof(temp);i++){
   //    printf("%s\n",temp[i]);
   //}      

system("pause");
return 0;
}

2 个答案:

答案 0 :(得分:1)

试试这个--->

  1. 可以使用strstr查找子字符串。
  2. 初始化计数索引以查找位置

答案 1 :(得分:0)

工作代码:

#include <stdio.h>
#include <string.h>

#define LIMIT 200

int main(void)
{
    char morse[LIMIT];
    char *temp[LIMIT];
    char *token;
    char *str;
    int i = 0, j;
    struct Morse { char code[8]; char letter; };
    struct Morse alphabet[] =
    {
        { ".-",   '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' },
        { "/",    ' ' },
    };
    enum { NUM_MORSE = sizeof(alphabet)/sizeof(alphabet[0]) };

    printf("Enter morse code: ");
    if (fgets(morse, sizeof(morse), stdin) == 0)
        return 0;
    if ((token = strchr(morse, '\n')) != NULL)
        *token = '\0';

    str = morse;
    while ((token = strtok(str, " ")) != NULL)
    {
        temp[i++] = token;
        //printf("%s\n", token);
        str = NULL;
    }
    temp[i] = NULL;

    for (i = 0; temp[i] != NULL; i++)
    {
        //printf("%-6s ", temp[i]);
        for (j = 0; j < NUM_MORSE; j++)
        {
            if (strcmp(temp[i], alphabet[j].code) == 0)
            {
                putchar(alphabet[j].letter);
                break;
            }
        }
        //putchar('\n');
    }
    putchar('\n');

    return 0;
}

示例:

Enter morse code: .... . .-.. .-.. --- / .-- --- .-. .-.. -..
HELLO WORLD

如果你愿意,你可以改进线性搜索,但它可能不值得。一种选择是按照正常英语中字母出现的频率顺序排序(因此E出现在T之前,等等);另一种是排序和使用二进制搜索。