#include <stdio.h>
int main()
{
//存放数字摩斯电码,如数字0的摩斯电码为-----则将输出数组第10至14位
char Number_Mcode[14] = {"----.....-----"};
//存放字母摩斯电码,每一个字母对应的摩斯电码用空格键隔开,第几个空格键的后面存放的就是字母表里的第几个字母
char Alphabet_Mcode[110] = {" .- -... -.-. -.. . ..-. --. .... .. .--- -.- .-.. -- -. --- .--. --.- .-. ... - ..- ...- .-- -..- -.-- --.. "};
char To_be_translated[100] = {0};//存放输入的待转换的字符串
printf("您可以输入一串由数字和小写字母组成的字符串,将会输出对应的摩斯电码\n");
gets(To_be_translated);
//循环的次数等于输入字符串的长度
for(int i = 0;i<strlen(To_be_translated);i++)
{
if(To_be_translated[i]>='0'&&To_be_translated[i]<='9')//如果字符串第i位为数字
{
for(int j=5;j>0;j--)//数字的摩斯电码为五个电码符号故j=5
{ //将输入的字符转换为对应数字后,获取对应摩斯电码
printf("%c",Number_Mcode[14-(int)(To_be_translated[i]-'0')-j]);
if (j == 1)printf(" ");
}
}
else
{
int space_number = 0;//代表字母电码数组里空格的序号
for (int j = 0; j < 110; j++)//存放字母摩斯电码的数组里字符的数量为110
{
if (Alphabet_Mcode[j] == ' ')space_number++; //扫描到数组里的空格键时加1
if (space_number == (int)(To_be_translated[i]-'a'+1))//空格键的序号和字母序号相等时执行
{
int code_begin = j + 1;//每个电码的开头为空格键的下一个
while (Alphabet_Mcode[code_begin] != ' ')//未扫描到下一个空格键时输出扫描到的电码符号
{
printf("%c",Alphabet_Mcode[code_begin]);//输出对应的电码符号
code_begin++;//指向下一个符号
if(Alphabet_Mcode[code_begin] == ' ')
{ //当扫描到下一个空格键时输出一个空格键分隔开每个摩斯电码
printf(" ");
j = 110;//j = 110 结束对字母电码数组的扫描
}
}
}
}
}
}
}
小程序-将输入的数字和字母转换为摩斯电码
最新推荐文章于 2023-12-01 15:37:59 发布