这是我的代码,我现在真的被困住了。 问题是,用户输入摩尔斯电码,然后通过标记将每个存储在一个数组上,现在我的问题是,我如何搜索我为每个标记存储特定字符串的数组?
例如,我输入了.... . .-.. .-.. --- / .-- --- .-. .-.. -..
作为我的摩尔斯电码,然后将其标记化。
现在我想在数组中搜索特定字符串中的每个标记,例如:
我会搜索“....”然后如果它搜索一个,它会打印出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;
}
答案 0 :(得分:1)
试试这个--->
strstr
查找子字符串。答案 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之前,等等);另一种是排序和使用二进制搜索。