C ++字符未正确处理

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

标签: c++

我有一个我编写的基本加密程序,它从用户的加密文本中获取输入,通常是以Unicode字符的形式。但是当我这样做时:

cout << "Your decrypted string is : " << decryptstring(text, key) << endl;

它给了我错误的答案,并且完全错误地获取了字符代码,例如è将是-118

然而,当我这样做时:

cout << "Your decrypted string is : " << decryptstring("è", key) << endl;

它无缝地工作!

我该如何解决这个问题?如果您需要查看我的其他代码,请询问。感谢

我从getline(cin, text);

获取文字

decryptstring函数:

#include <iostream>
#include <string>
#include <vector>

using namespace std;
string decryptstring(string text, string key)
{
    //Declare variables
    int i = 1;
    int result;
    int tmp;
    int tmp2;


    vector < char > arr;



    //Start decryption
    while(i <= text.length())
    {
        /*
        Get letter from the string and get letter from key
        and use Vigenere cipher to decrypt the data.
        */
        tmp  = text[i - 1];

        tmp2 = key[i - 1];
        cout << tmp << endl;
        //Get encrypted value
        result = tmp - tmp2;
        //Change it into readable stuff
        arr.push_back(result);

        //Increment i
        i++;
    }

    string str(arr.begin(), arr.end());

    return str;
}

1 个答案:

答案 0 :(得分:0)

您需要为unicode使用宽字符。

因此decryptstring

std::wstring decryptstring(const std::wstring& text, const std::wstring& key) {
   // Do stuff
   return text;
}

然后

std::wcout << L"Your decrypted string is : " << decryptstring(text, key) < std::endl;
std::wcout << L"Your decrypted string is : " << decryptstring(L"è", key) << std::endl;

其中

std::wstring text; // is declared before use