我正在尝试编写将ASCII转换为十进制,添加到十进制并转换回ASCII的软件

时间:2018-08-30 03:24:24

标签: c++ encryption software-design

我的代码有麻烦。这是我到目前为止的内容:

#include <iostream>
using namespace std;

int main()
{
    char word[128];
    int x = 0;
    int v;
    int shift;
    int sv;
    cin >> shift;
    cin >> word;

    while (word[x] != '\0')    // While the string isn't at the end... 
    {
        cout << int(word[x]) << " ";    // Transform the char to int
        x++;

        v = int(word[x]);
        sv = v + shift;

        cout << sv;
    }

    return 0;
}

这是一个凯撒密码,至少是其中的一部分。

当我输入时:

shift=1
word=f

我希望结果是:

102 103

相反,我最终得到了这个:

102 1

我在做什么错?有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

在完成所有处理后,循环计数器通常在循环结束时增加。在您的情况下,x在确定while循环的条件时充当循环计数器。

因此语句x++应该在所有处理之后,即在最后一个cout之后。

对于for loop

  

iteration_expression在循环的每次迭代后之后之前重新执行条件时执行。通常,这是使循环计数器递增的表达式

因此您可以将上述while更改为for,如下所示:

for(x = 0; word[x] != '\0'; x++)

然后,您不必必须在循环内递增x

答案 1 :(得分:0)

在循环结束时移动递增x的行。您要先显示x,然后才能显示移位的值。

while (word[x] != '\0')    // While the string isn't at the end... 
{
    cout << int(word[x]) << " ";    // Transform the char to int

    v = int(word[x]);
    sv = v + shift;

    cout << sv;
    x++;
}