Her*_*erp -3 c encoder decoder
是的它的功课我们假设有char二维数组保持字符,大小限制为255个字符 char string[100][255];
程序neede:用户将输入的莫尔斯码改为字母/英文字母(大写字母)
样本输入
2
.... . .-.. .-.. --- / .-- --- .-. .-.. -..
.--- --- -.- .
Run Code Online (Sandbox Code Playgroud)
样品OutPut
情况1:
HELLO WORLD
Run Code Online (Sandbox Code Playgroud)案例2:
JOKE
Run Code Online (Sandbox Code Playgroud)我唯一的想法是让一个单词的第一个字符由用户输入..要检查它是否是'.' 或' - '然后仔细并手动分配..嵌套if(string[i][c]=='.') 和最后一个如果在每个嵌套上将if(string[i][c]==' ')打印出字母"E"示例
if(string[i][c]=='.') {
isspace(string[i][c+1])
printf("E");
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是..有没有更简单的方法来解决这个问题?我不需要输入相同的' - '和'.' 如果声明..和东西?我的思绪爆炸了吗?因为我用if或case语句丢失了对应下一个char的跟踪?
M O*_*ehm 11
你已经发现了,你可以在每个莫尔斯信号,它是烦人硬编码的所有作为该部门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 * *
Run Code Online (Sandbox Code Playgroud)
同样的树可以在莫斯科代码维基百科条目的中间部分(稍微)更漂亮的形式中找到.(最下面一行中的星号表示编码不是英文字母的26个字母之一.)
你从顶部开始.分支留在dit上,分支在dah上,并在完成后读取值.
有很多方法可以实现树.在这种情况下,树的分支都具有相同的深度,至少如果我们考虑星号也是如此.您可以通过逐行索引节点将树表示为线性数组.当toe top node为1时,你得到:
1
/ \
2 3
/ \ / \
4 5 6 7
/ \ / \ / \ / \
8 9 10 11 12 13 14 15
/ \ / \ / \ / \ / \ / \ / \ / \
16 ... ... 31
Run Code Online (Sandbox Code Playgroud)
您可以看到从节点左侧的分支n将您带到节点,2*n并且分支右侧将您带到索引的右邻居2*n + 1.从1开始构建索引,然后在数组中查找你的字母:
const char *letter = "**ETIANMSURWDKGOHVF?L?PJBXCYZQ??";
Run Code Online (Sandbox Code Playgroud)
(前面的两个星号表示非法指数.)
| 归档时间: |
|
| 查看次数: |
19104 次 |
| 最近记录: |