0

我正在尝试将输入:“²³”转换为“2,3”,如果不是“²³”则返回“否”

预期结果:

输入密钥:²³ 翻译:2,3,

实际结果:

输入密钥:²³ 翻译:NoNoNoNo

代码:

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



// To Compile: g++ x.cpp -o x

using namespace std;

//Define the functions

string convert( string text);


int main()
{

string d;
string input;
string cleartext;
cout << "Enter the key: ";
cin >> input;


vector <string> key ( input.size() );        // Make a vector with the size of their input
for (int i = 0; i < input.size(); i++)       // Fill the vector with the characters given
    {
        key.at(i)=input[i]; 
        d = convert( key[i]);
        cleartext.append(d);
    }
cout << "Translated: " << cleartext << endl;
return 0;
}




string convert( string text)
{
if (text == "²") 
{
return "2,";
} 
if (text == "³") 
{
return "3,";
}
return "No";
}

我无法让它正常运行并且很困惑。我猜它必须与逗号有关,任何人都可以添加一些见解吗?

4

1 回答 1

0

这看起来好像您正在处理 UTF-8 编码数据,希望每个 Unicode 代码点适合char. 鉴于 Unicode 至少使用 20 位(上次我对那个主题感兴趣;我很高兴,因为他们已经转移到 24 位,但我还没有验证这个说法),这不太行得通。当使用 UTF-8 表示时,您的字符 SUPERSCRIPT TWO (U+00B2) 和 SUPERSCRIPT THREE (U+00B3) 将分别使用两个字节。鉴于两个字符的输入导致“否”被打印四次,这几乎支持了这个猜测。

在处理 Unicode 时,您可能最好使用宽字符串,例如,std::basic_string<char32_t>尽管我不认为需要定义这种字符类型的流。只要您单独处理特殊字符,您可能std::wstring在大多数情况下都可以使用,尽管wchar_t在某些平台上仅使用 16 位,因此在这种情况下将使用 UTF-16 对字符进行编码。

于 2013-10-12T19:57:10.590 回答