gpt4 book ai didi

c - C 语言摩尔斯电码转换器

转载 作者:行者123 更新时间:2023-11-30 20:43:51 25 4
gpt4 key购买 nike

是的,它的作业我们假设有一个 char 2D 数组来保存大小限制为 255 个字符的字符 char string[100][255];

程序需求:将用户输入的莫尔斯电码改为字母/英文字母(大写字母)

示例输入

2

.... . .-.. .-.. --- / .-- --- .-. .-.. -..

.--- --- -.- .

示例输出

  • 案例#1:

    HELLO WORLD
  • 案例#2:

    JOKE

我唯一的想法是让用户输入的单词的第一个字符..检查它是否为“.”或 '-',然后小心翼翼地手动分配.. 嵌套的 if(string[i][c]=='.') 和每个嵌套的最后一个 if 将为 if(string [i][c]==' ') 然后打印出字母“E”示例

if(string[i][c]=='.') {
isspace(string[i][c+1])
printf("E");
}

现在我的问题是..有没有更简单的方法来解决这个问题?我不必输入相同的“-”和“.” if 语句..之类的东西?我的思想爆炸了吗?因为我找不到与 if 或 case 语句相对应的下一个字符?

最佳答案

您已经发现可以在每个莫尔斯信号上进行分支,并且将所有这些硬编码为 if-else 语句是很烦人的。当您这样做时,您将注意到具有更深嵌套条件的特定结构。您可以将此结构表示为树:

                       *
/ \
E T
/ \ / \
I A N M
/ \ / \ / \ / \
S U R W D K G O
/ \ / \ / \ / \ / \ / \ / \ / \
H V F * L * P J B X C Y Z Q * *

同一棵树可以在 middle sections of the Wikipedia entry on Morse code 中以(稍微)更漂亮的形式找到。 。 (最下面一行的星号表示编码不是英语字母表的 26 个字母之一。)

你从顶部开始。在“dit”上向左分支,在“dah”上向右分支,完成后读取值。

实现树的方法有很多种。在这种情况下,树的分支都具有相同的深度,至少如果我们也考虑星号的话。您可以通过按行 inode 将树表示为线性数组。当脚趾顶部节点为 1 时,您将得到:

                       1
/ \
2 3
/ \ / \
4 5 6 7
/ \ / \ / \ / \
8 9 10 11 12 13 14 15
/ \ / \ / \ / \ / \ / \ / \ / \
16 ... ... 31

您可以看到,从节点 n 向左分支将到达节点 2*n,向右分支将您到达索引为 2*n 的右邻居+ 1。从 1 开始建立索引,然后在数组中查找您的字母:

const char *letter = "**ETIANMSURWDKGOHVF?L?PJBXCYZQ??";

(前面的两个星号表示非法索引。)

关于c - C 语言摩尔斯电码转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28045172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com