Функция C ++, возвращающая строку с запятой

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";
}

Я не могу заставить его работать должным образом и довольно сильно. Я предполагаю, что он должен что-то делать с запятой, может ли кто-нибудь добавить понимание?

Теги:
comma
return

1 ответ

0

Это выглядит так, как будто вы обрабатываете кодированные данные UTF-8, надеясь, что каждая кодовая точка Юникода вписывается в char. Учитывая, что Unicode использует не менее 20 бит (в прошлый раз меня интересовали эти темы, я так понимаю, что с тех пор, как они переместились на 24 бита, но я не подтвердил это утверждение), это не сработает. Ваши символы SUPERSCRIPT TWO (U + 00B2) и SUPERSCRIPT THREE (U + 00B3) будут использовать два байта, если они представлены с использованием UTF-8. Учитывая, что ввод двух символов приводит к тому, что "Нет" печатается в четыре раза, довольно много подкрепляет это предположение.

При обработке Unicode вам, вероятно, лучше использовать широкую строку символов, например std::basic_string<char32_t> хотя я не думаю, что потоки этого типа символов должны быть определены. До тех пор, пока вы обрабатываете специальный символ отдельно, вы, вероятно, можете уйти с помощью std::wstring в большинстве случаев, хотя wchar_t использует только 16 бит на некоторой платформе и, таким образом, будет кодировать символы, используя UTF-16 в этом случае.

  • 0
    Эй, спасибо за ваш ответ на это. Я пытался поработать над вашим решением для моего кода, но не могу заставить его работать. Можете ли вы дать мне пример?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню