用于解密代码的C代码

时间:2014-01-08 07:45:49

标签: c string

我想编写一个接收编码字符串的程序,并打印解码后的字符串。 每个单词后面的数字是用于编码该单词的“左移”数字。

即时:

  

请插入编码字符串

     

uif1hdjoh3has0ncpfgf2

     

解码后的字符串是:

     老鹰降落了

我无法弄清楚为什么它不起作用: 当我切换:

solved_lett=(spaced_string[k]-factors[j]-'0'

为:

solved_lett=(spaced_string[k]+factors[j]-'0'

它的工作正常(但我希望将字母移到左边而不是右边)。

并且,使其在圆圈中工作的最佳方式是,

  

A1

将是

  

ž

include <stdio.h>

int main()
{
char string[101]={0}, spaced_string[101]={0}, factors[101]={0}, solved_str[101]={0}, solved_lett;
int  i=0, j=0, k=0;

printf("Please insert the coded string\n");
scanf("%s",string);
for (i=0; i<101;i++ ) {
    if (string[i]=='\0') {
        break;
    }
    if ((string[i]>96)&&(string[i]<123)) {
       spaced_string[i]=string[i];
    } else {
        spaced_string[i]=32;
        factors[j]=string[i];
        j++;
    }

}
k=0;
j=0;
for (k=0; k<i; k++) {
    if (spaced_string==0) {
        break;
    }
    if (spaced_string[k]!=32) {
        solved_lett=(spaced_string[k]-factors[j]-'0');
        solved_str[k]=solved_lett;
    }
    else  {
        j++;
        solved_str[k]=32;
    }
}


printf("%s",solved_str);

return 0;

}

2 个答案:

答案 0 :(得分:0)

您希望从factors

中减去spaced_string中的数字
solved_lett = spaced_string[k] - (factors[j] - '0');

这样,您首先将因子转换为int值,然后将其减少为实际的char值。 现在,您可以测试结果是否太小而无法成为有效字符:

if (solved_lett < 'a')
  solved_lett += 26;

如果你也使用大写字母,你也需要检查它们

答案 1 :(得分:0)

在另一种方法中,您可以使用factors[j] - '0'而不是atoi()。我认为这将起到同样的作用,并提高可读性。

此外,如果您想将其用作字符串,则可能需要在最终\0的末尾添加char array

请检查以下代码。

#include <stdio.h>
#include <stdlib.h>

int main()
{
        char string[101]={0}, spaced_string[101]={0}, factors[101]={0}, solved_str[101]={0}, solved_lett;
        int  i=0, j=0, k=0;

        printf("Please insert the coded string\n");
        scanf("%s",string);
        for (i=0; i<101;i++) {
                if (string[i]=='\0') {
                        break;
                }
                if ((string[i]>96)&&(string[i]<123)) {
                        spaced_string[i]=string[i];
                } else {
                        spaced_string[i]=32;
                        factors[j]=atoi(&string[i]); //save as int
                        j++;
                }

        }
        k=0;
        j=0;
        for (k=0; k<i; k++) {
                if (spaced_string==0) {
                        break;
                }
                if (spaced_string[k]!=32) {
                        solved_lett=(spaced_string[k]-factors[j]);//use directly
                        solved_str[k]=solved_lett;
                }
                else  {
                        j++;
                        solved_str[k]=32;
                }
        }

        solved_str[k]=0;//required to print as a string

        printf("Decoded is %s\n", solved_str);

        return 0;
}

修改

在上述情况下,您还应该检查输入的number的有效值。例如,您应该检查string[i]的值是否介于48和57之间(ASCII 0-9),如果成功,那么只有您应继续使用atoi()