我正在尝试创建一个获取字符串和数字的函数,如果数字大于'0',那么它将使用字符串和用户输入的数字生成caesar密码。例如 - > 'stack'和数字是'3' - > 'uvdfn'。如果数字为'0',那么它将反转字符串。例如 - 'stack' - > 'kcats'
我不知道代码有什么问题,我没有看到任何错误。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void decryptText(char* encText, int n);
#define STR_SIZE 50
int main(void)
{
char str[STR_SIZE];
int num = 0;
printf("Please enter the string : ");
fgets(str, STR_SIZE, stdin);
printf("Please enter a number : ");
scanf("%d", &num);
decryptText(str, num);
system("PAUSE");
return 0;
}
void decryptText(char* encText, int n)
{
int i = 0;
int j = 0;
char temp = 0;
int strLen = strlen(encText);
if (n > 0)
{
for (i = 0; i < strLen; i++)
{
if (*(encText + i) == ' ') { }
else
{
if (*(encText + i) >= 'x')
{
*(encText + i) = (*(encText + i)) - 26;
}
*(encText + i) = (*(encText + i)) + n;
}
}
printf("The array after the program deciphered it : \n");
printf("%s", encText);
}
else if (n == 0)
{
for (i = 0; i < strLen; i++)
{
for (j = 0; j >= 0; j--)
{
temp = *(encText + i);
*(encText + i) = *(encText + j);
*(encText + i) = temp;
}
}
printf("The array after the program cracked it : \n");
printf("%s", encText);
}
}
答案 0 :(得分:0)
if (*(encText + i) >= 'x')
{
*(encText + i) = (*(encText + i)) - 26;
}
应该是
if (*(encText + i) + n > 'z')
{
*(encText + i) = (*(encText + i)) - 26;
}
答案 1 :(得分:0)
编码部分中的错误是以下代码段:
if (*(encText + i) >= 'x')
{
*(encText + i) = (*(encText + i)) - 26;
}
*(encText + i) = (*(encText + i)) + n;
首先,您必须确定是否获得了大写或小写输入。首先,我们假设只有小写输入。 在此片段中,您首先必须从实际字符中减去“a”,然后将选定的旋转数字添加到计算值,第三个计算模块的模数,然后在值中添加“a”。
char temp;
temp = *(encText + i);
temp -= 'a';
temp += n;
temp %= 26;
temp += 'a';
*(encText + i) = temp;
或简称:
*(encText + i) = (*(encText + i) - 'a' + n) % 26 + 'a';
顺便说一句:你的破解操作看起来不太有效......