- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是的,它的作业我们假设有一个 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/
我是一名优秀的程序员,十分优秀!