【问题标题】:Shift cipher in C++ (How to get ASCII value and handling numbers)C++ 中的移位密码(如何获取 ASCII 值和处理数字)
【发布时间】:2015-02-20 07:01:06
【问题描述】:

我已经设置了一个程序来读取文件并将每一行拆分为单词,将它们存储到字符串的双向量中。也就是说,

std::vector < std::vector <std::string> > words

因此,我们的想法是使用字母 a-z 中的数组并使用字母的 ASCII 值来获取索引并将字符串中的字符与适当的移位字符交换。如何获取每个字符的值以便将其作为索引查找?

我还想保持数字完整,我相信,作为移位密码,它不会对要破译的文本中的数字做任何事情。我将如何检查字符是否为 int 以便我可以不理会它?

【问题讨论】:

  • 您似乎在问如何获取字符串向量中的一个字符串的单个字符的 ascii 值。 cout &lt;&lt; static_cast&lt;unsigned&gt;(words[0][0][1]) &lt;&lt; "\n"; 将打印向量向量中第一个字符串中第二个字符的 ascii 值。

标签: c++ encryption vector ascii shift


【解决方案1】:

如果您想要 ASCII 值,只需将值转换为 int

int ascii_value = (int)words[i][j][k];

如果你想有一个从Aa 开始的值,你可以这样做:

int letter_value_from_A = (int)(words[i][j][k] - 'A');
int letter_value_from_a = (int)(words[i][j][k] - 'a');

【讨论】:

    【解决方案2】:

    您的 char 只不过是一个值。以这段代码为例(我习惯编程C++11,所以会有点难看):

    char shiftarray[256] = {0, 0, 0, 0 // Here comes your map //
    std::string output;
    
    for(int w=0; w<words.length(); w++)
    {
       for(int c=0; c<words[w].length(); c++)
       {
          output.pushback(shiftarry[words[w][c]]);
       }
       output.push_back(' ');
    }
    

    【讨论】:

      【解决方案3】:

      除了基本的,我不知道如何做,但非常简单地使用循环获取字符串中每个字母的 ascii 值。随着循环继续向您刚刚获得的 ascii 值添加一个值或减去一个值,然后将其转换回一个字母并将其附加到一个字符串。这会给你一个不同于你原来的性格。通过这样做,您可以加载和保存数据,如果有人试图在编写数据的程序以外的地方查看这些数据,这些数据看起来就像是乱码。然后数据会变成一种特殊的专有文档格式。

      【讨论】:

        猜你喜欢
        • 2017-09-08
        • 2021-03-04
        • 1970-01-01
        • 1970-01-01
        • 2010-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多