我想编写一个接收编码字符串的程序,并打印解码后的字符串。 每个单词后面的数字是用于编码该单词的“左移”数字。
即时:
请插入编码字符串
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;
}
答案 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()