C ++用数字修改字符串的问题

时间:2016-03-12 17:59:16

标签: c++ pointers

我做了一个简单的加密功能,它会加密除0-9个数字之外的所有内容(忽略特殊字符)。

这是代码。

#include <iostream>

using namespace std;

void encrypt(char s[])
{
    char *ptr;
    ptr=s;
    while(*ptr)
    {
            switch (*ptr)
        {
            case 'a':   *ptr='b';
                        break;
            case 'b':   *ptr='a';
                        break;
            case 'c':   *ptr='z';
                        break;
            case 'd':   *ptr='y';
                        break;
            case 'e':   *ptr='c';
                        break;
            case 'f':   *ptr='d';
                        break;
            case 'g':   *ptr='x';
                        break;
            case 'h':   *ptr='g';
                        break;
            case 'i':   *ptr='i';
                        break;
            case 'j':   *ptr='h';
                        break;
            case 'k':   *ptr='f';
                        break;
            case 'l':   *ptr='j';
                        break;
            case 'm':   *ptr='q';
                        break;
            case 'n':   *ptr='o';
                        break;
            case 'o':   *ptr='p';
                        break;
            case 'p':   *ptr='m';
                        break;
            case 'q':   *ptr='n';
                        break;
            case 'r':   *ptr='l';
                        break;
            case 's':   *ptr='k';
                        break;
            case 't':   *ptr='x';
                        break;
            case 'u':   *ptr='w';
                        break;
            case 'v':   *ptr='u';
                        break;
            case 'w':   *ptr='v';
                        break;
            case 'x':   *ptr='t';
                        break;
            case 'y':   *ptr='s';
                        break;
            case 'z':   *ptr='r';
                        break;
            case 1:   *ptr=5;
                        break;
            case 2:   *ptr=6;
                        break;
            case 3:   *ptr=0;
                        break;
            case 4:   *ptr=1;
                        break;
            case 5:   *ptr=2;
                        break;
            case 6:   *ptr=7;
                        break;
            case 7:   *ptr=4;
                        break;
            case 8:   *ptr=3;
                        break;
            case 9:   *ptr=8;
                        break;
            case 0:   *ptr=9;
                        break;
            default:    *ptr=*ptr;
                        break;
        }
        *ptr++;
    }
    *ptr='\0';
}

int main()
{
   char password[10];
   cout<<"Enter the password\n";
   cin>>password;
   encrypt(password);
   cout<<password<<endl;
   return 0;
}

这是一个示例输出 sh-4.3 $ main
输入密码
thisisanex!1234567
xgikikboct !! 1234567

2 个答案:

答案 0 :(得分:4)

您需要使用字符'1'而不是整数值1。

因此,请使用case '1':代替case 1:,依此类推其他数字。

答案 1 :(得分:0)

正如nos所说,这个字符与整数值不同。 但是,看看你的代码,这样做会更有意义:

#include <iostream>
#include <string>

using namespace std;

int main(){
    string charset = "abcdefghijklmnopqrstuvwxyz1234567890";
    string scrambledcharset = "r5b6ng1fcl8htau9i74kxy0vjw3psemqz2do";  //Whatever order you want
    string uIn;
    string output;
    cout << "Enter your string: ";
    cin >> uIn;
    cin.ignore();
    for(int i = 0; i < uIn.length(); i++){
        for(int j = 0; j < charset.length(); j++){
            if(uIn[i] == charset[j]){
                output += scrambledcharset[j];
            }
        }
    }
    cout << "\nScrambled: " << output;
    return 0;
}