摩尔斯电码翻译器的文本有效但打印(空)
text to Morse code translator works but prints (null)
我想出了如何将用户输入翻译成摩尔斯电码。有用。唯一困扰我的是,无论我提供什么输入,在结果的末尾它都会显示 (null) 并且我不知道我必须更改我的代码才能摆脱它。我认为这可能是无法翻译的数组的结尾
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* tableSetup();
char* all_Cap(char sentence[]);
char* trans_to_morse(char* morse[], int b);
int main()
{
char* morse[1024];
char sentence[256];
fgets(sentence,256,stdin);
all_Cap(sentence);
int b=strlen(sentence);
for(int i=0;i<b;i++){
morse[i]=tableSetup(sentence[i]);
}
trans_to_morse(morse, b);
return (0);
}
char* tableSetup(int i){
char* table[256]={0};
table['0']="-----";
table['1']=".----";
table['2']="..---";
table['3']="...--";
table['4']="....-";
table['5']=".....";
table['6']="-....";
table['7']="--...";
table['8']="---..";
table['9']="----.";
table['A']=".-";
table['B']="-...";
table['C']="-.-.";
table['D']="-..";
table['E']=".";
table['F']="..-.";
table['G']="--.";
table['H']="....";
table['I']="..";
table['J']=".---";
table['K']="-.-";
table['L']=".-..";
table['M']="--";
table['N']="-.";
table['O']="---";
table['P']=".--.";
table['Q']="--.-";
table['R']=".-.";
table['S']="...";
table['T']="-";
table['U']="..-";
table['V']="...-";
table['W']=".--";
table['X']="-..-";
table['Y']="-.--";
table['Z']="--..";
table['.']=".-.-.-";
table[',']="--..--";
table[':']="---...";
table[';']="-.-.-.";
table['?']="..--..";
table['!']="-.-.--";
table['-']="-....-";
table['_']="..--.-";
table['(']="-.--.";
table[')']="-.--.-";
table['"']=".-..-.";
table['=']="-...-";
table['+']=".-.-.";
table['/']="-..-.";
table['@']=".--.-.";
table[' ']=".......";
return(table[i]);
}
char* all_Cap(char sentence[]){
int b=strlen(sentence);
for(int i=0;i<b;i++){
if(sentence[i]>=97 && sentence[i]<=122) sentence[i] -=32;
}
return(sentence);
}
char* trans_to_morse(char* morse[], int b){
for(int i=0;i<b;i++){
printf("%s ",morse[i]);
}
return(0);
}
结果:
How are you?
.... --- .-- ....... .- .-. . ....... -.-- --- ..- ..--.. (null)
Process returned 0 (0x0) execution time : 6.915 s
Press any key to continue.
只需包含一个初始化行,上面写着
table[`\n`] = "";
问题是 fgets(3)
包含最后一个 \n
字符,因此您尝试打印它,而 \n
字符的 table 条目是NULL
与您在声明中分配的一样。
另一种解决方案是映射 table['\n'] = "\n";
,这样一个换行符就被映射到一个只有 \n
的字符串中,您将把输出莫尔斯电码分成几行,就像您处理输入一样.
我想出了如何将用户输入翻译成摩尔斯电码。有用。唯一困扰我的是,无论我提供什么输入,在结果的末尾它都会显示 (null) 并且我不知道我必须更改我的代码才能摆脱它。我认为这可能是无法翻译的数组的结尾
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* tableSetup();
char* all_Cap(char sentence[]);
char* trans_to_morse(char* morse[], int b);
int main()
{
char* morse[1024];
char sentence[256];
fgets(sentence,256,stdin);
all_Cap(sentence);
int b=strlen(sentence);
for(int i=0;i<b;i++){
morse[i]=tableSetup(sentence[i]);
}
trans_to_morse(morse, b);
return (0);
}
char* tableSetup(int i){
char* table[256]={0};
table['0']="-----";
table['1']=".----";
table['2']="..---";
table['3']="...--";
table['4']="....-";
table['5']=".....";
table['6']="-....";
table['7']="--...";
table['8']="---..";
table['9']="----.";
table['A']=".-";
table['B']="-...";
table['C']="-.-.";
table['D']="-..";
table['E']=".";
table['F']="..-.";
table['G']="--.";
table['H']="....";
table['I']="..";
table['J']=".---";
table['K']="-.-";
table['L']=".-..";
table['M']="--";
table['N']="-.";
table['O']="---";
table['P']=".--.";
table['Q']="--.-";
table['R']=".-.";
table['S']="...";
table['T']="-";
table['U']="..-";
table['V']="...-";
table['W']=".--";
table['X']="-..-";
table['Y']="-.--";
table['Z']="--..";
table['.']=".-.-.-";
table[',']="--..--";
table[':']="---...";
table[';']="-.-.-.";
table['?']="..--..";
table['!']="-.-.--";
table['-']="-....-";
table['_']="..--.-";
table['(']="-.--.";
table[')']="-.--.-";
table['"']=".-..-.";
table['=']="-...-";
table['+']=".-.-.";
table['/']="-..-.";
table['@']=".--.-.";
table[' ']=".......";
return(table[i]);
}
char* all_Cap(char sentence[]){
int b=strlen(sentence);
for(int i=0;i<b;i++){
if(sentence[i]>=97 && sentence[i]<=122) sentence[i] -=32;
}
return(sentence);
}
char* trans_to_morse(char* morse[], int b){
for(int i=0;i<b;i++){
printf("%s ",morse[i]);
}
return(0);
}
结果:
How are you?
.... --- .-- ....... .- .-. . ....... -.-- --- ..- ..--.. (null)
Process returned 0 (0x0) execution time : 6.915 s
Press any key to continue.
只需包含一个初始化行,上面写着
table[`\n`] = "";
问题是 fgets(3)
包含最后一个 \n
字符,因此您尝试打印它,而 \n
字符的 table 条目是NULL
与您在声明中分配的一样。
另一种解决方案是映射 table['\n'] = "\n";
,这样一个换行符就被映射到一个只有 \n
的字符串中,您将把输出莫尔斯电码分成几行,就像您处理输入一样.