我在用C解决一个叫做“解码信息”的密码战问题。
我的代码通过了示例测试,但无法通过随机测试,因为它在所需字符后添加了随机字符,如图像enter image description here所示
有什么问题吗?
问题链接:[网址:
#include <string.h>
#include <ctype.h>
char *decode (const char *encoded, char *decoded)
{
for (int i = 0; i < strlen(encoded); i++)
{
if (isalpha(encoded[i]))
{
if (encoded[i] <= 109)
{
decoded[i] = encoded[i] + 25 - ((encoded[i] - 'a')*2);
}
else if (encoded[i] >= 110)
{
decoded[i] = encoded[i] - 25 + (('z' - encoded[i])*2);
}
}
else
{
decoded[i] = encoded[i];
}
}
return decoded; // return it
}
1条答案
按热度按时间xu3bshqb1#
如注解中所示,OP * 描述的症状表明 * 接收缓冲区未正确终止以生成C字符串。
此外,应该避免在代码中使用“幻数”,如109和110......这些数字是什么意思?如果取消“全部小写”的限制,它们肯定不会起作用。那么,是否应该复制/粘贴/修改许多行代码,仅仅是为了处理大小写字母?
以下是LESS代码,它不仅处理OP问题(未终止字符串),而且处理大小写字母(认识到“case”会削弱任何加密。此处仅用于演示技术)。
祝你在这些学习挑战中玩得开心。
如果有任何不清楚的地方,请在下面提出问题...