c ++转换密码

时间:2015-05-26 00:30:35

标签: c++

我正在尝试进行换位密码,问题如下。

用户给出一个没有空格的字符串。让我们说string = thisisamessage。 然后用户给出名为b的块大小,让我们说b = 5; 然后,用户提供密钥,该密钥是从1到块大小b(在这种情况下为5)的唯一数字的数字。所以我们说32154

回顾:

text = thisisamessage
block number b = 5
key = 32154

根据b分隔字符串 在这种情况下,五个,但最后一部分只有4个字符,这是我遇到问题的部分。

12345 | 12345 | 1234
thisi | sames | sage

32154 | 32154 | 3214
ihtis | masse | gase

基本上取决于键我需要做的事情就是说第一个键号是3然后第3个字母将成为第一个字母this,第三个字母是i所以{{1先行,然后第二个键号是2,所以i接下来等等。直到最后一个块,我有问题。在这种情况下,在第5个块中只剩下4个字母,并且对于每个块,键再次开始。但是例如,如上所述,我没有任何与5对应的字符,所以我需要删除5个,但仍然保持h成为32154的顺序,这样我就可以更改下一个字母。< / p>

我该怎么做?如果您需要我的代码,请告诉我。

堆栈和其他网站上的其他答案与我的问题类似。

1 个答案:

答案 0 :(得分:0)

我可以提供这个解决方案。函数参数的验证没有。

#include <iostream>
#include <string>
typedef unsigned int uint;

std::string simpletransform(
    const std::string &line,
    const std::string &key,
    const uint number);
int main()
{
    std::string line="thisisamessage";
    uint number = 5;
    std::string key = "32154";
    std::cout<<simpletransform(line,key,number)<<std::endl;
    return 0;
}
std::string simpletransform(
    const std::string &line,
    const std::string &key,
    const uint number)
    {
    std::string resultstr;
    std::string substr;
    size_t N = line.size()%number;
    size_t i=0;
    for(size_t j=0;i<N-number;i++,j++)
        {
        if(i%number==0)
            {
            substr = line.substr(i,number);
            j=0;
            if(substr.size()!=number) break;
            }
        auto temp = static_cast<uint>(key[j])-49;
        resultstr += substr[temp];
        }
    i=0;
    for(size_t count =0;count!=number;count++)
        {
        auto p = static_cast<uint>(key[count])-49;
        if(p>=N)
            continue;
        resultstr += substr[p];
        }
    return resultstr;
    }

测试:http://ideone.com/Q8am2s