Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > TextBox, char


Автор: Metalex 6.1.2011, 17:37
Из одного TextBox'a я заношу посимвольно данные в вектор типа чар:
Код

maschar.masiv.push_back(danie[i]);

А после сортировки вывожу их в другой текстбокс:
Код

for (int i=0; i<maschar.n; i++)
this->textBox2->Text+=Convert::ToString(maschar.masiv[i]);

но получаю на выходе их номера в таблице, а не сами символы. Подскажите, пожалуйста, как вывести сами символы?

Автор: jonie 6.1.2011, 18:34
Metalex, std::vector<char> ? Тогда вы получите сильно обрезанные данные, т.к. C# работает с UTF-16 кодировкой (двухбайтовая).

А для конвертации вам нужно будет использовать Encoding::ANSI->GetString() или другие её члены как мне кажется...

Автор: Metalex 7.1.2011, 02:09
Цитата(jonie @  6.1.2011,  18:34 Найти цитируемый пост)
std::vector<char> ?

да, именно.
только я не в c#, a в CLR Windows Forms пытаюсь.

Автор: Metalex 7.1.2011, 15:51
Пробую так:
Код

System::Text::Encoding^ encoding = System::Text::Encoding::UTF8;
                    array<Byte>^ buffer = gcnew array<Byte>(maschar.n);
                    String^ masch;
                    for (int i=0; i<maschar.n; i++)
                        masch+=Convert::ToString(maschar.masiv[i]);
                    buffer=encoding->GetBytes(masch);
                    this->textBox2->Text=encoding->GetString(buffer);

но на выходе все равно получаю номера..

Добавлено через 8 минут и 34 секунды
поясню условие поподробнее: нужно из maschar.masiv (это std::vector), длиной maschar.n=maschar.masiv.size() и который состоит из символов char получить string^, чтоб его можно было записать в textBox.

Автор: cream 9.1.2011, 19:20
Цитата

только я не в c#, a в CLR Windows Forms пытаюсь.

Metalex,  может, C++/cli?
Если нет необходимости в русских буквах:
Код

System::Void work_with_vector() 
        {
            std::vector<char> mas_char;
            String^ string_text = textBox1->Text;
            for ( int i = 0; i < string_text->Length; i++ )
            {
                mas_char.push_back( (char)string_text[i] );
            }

            String^ out_text = "";
            std::vector<char>::iterator iter = mas_char.begin();
            for ( unsigned int j = 0; j < mas_char.size(); j++ )
            {
                wchar_t wchrt = *iter;
                out_text += wchrt.ToString();
                iter++;
            }
            textBox2->Text = out_text;
        }

Автор: Metalex 10.1.2011, 20:43
cream, выводит снова номера :(

Автор: cream 11.1.2011, 00:57
Цитата(Metalex @  10.1.2011,  20:43 Найти цитируемый пост)
cream, выводит снова номера :(

Потому что вектор - это не массив, и оператор [ ] возвращает не элемент вектора, а ссылку на этот элемент.
Поэтому для тебя будет лучше пользоваться итератором, как в моем коде.

Автор: Metalex 11.1.2011, 02:32
Ну я и сделал так, как ты написал.

Автор: mrbrooks 11.1.2011, 11:27
Metalex, честно говоря выглядит как то жестко. Тем паче зря игнорируете замечание jonie - можно получить реально обрезанные данные.

если необходимо сортировка массива - почему бы это не сделать с помощью самой FCL.
к примеру хотя бы так:
Код

string str = "zxy";
char[] buf = str.ToCharArray();
Array.Sort(buf);
str = new string(buf);

собственно перевести на managed c++ не сложно.

считается не очень удачным стилем мешать управляемый и неуправляемый код. тем паче, что STL портирована на .NET.

Автор: cream 11.1.2011, 15:56
mrbrooks, дык вроде вся идея заключается в необходимости использования вектора. 
И, скорее всего, автору темы необходимо решение на native-коде.

Цитата(mrbrooks @  11.1.2011,  11:27 Найти цитируемый пост)
считается не очень удачным стилем мешать управляемый и неуправляемый код. тем паче, что STL портирована на .NET.

Зато вполне нормально написать функцию на неуправляемом, и потом использовать ее в управляемом коде.

Автор: mrbrooks 11.1.2011, 17:36
Цитата(cream @  11.1.2011,  15:56 Найти цитируемый пост)
mrbrooks, дык вроде вся идея заключается в необходимости использования вектора. 
И, скорее всего, автору темы необходимо решение на native-коде.

не спорю. просто из поставленного вопроса вытекает, что он использует вектор для сортировки. 

Цитата(cream @  11.1.2011,  15:56 Найти цитируемый пост)
Зато вполне нормально написать функцию на неуправляемом, и потом использовать ее в управляемом коде. 

это при условии, что есть аналогичный враппер на .net? 

Автор: Metalex 11.1.2011, 18:26
Да. Чар заносится в вектор, который сортируется. Необходимости в стандартных алгоритмах нет.

Автор: cream 11.1.2011, 22:30
Metalex,
http://msdn.microsoft.com/ru-ru/library/ecdecxh1.aspx

Код

std::vector<char> Sorting_vector( std::vector<char> s_vector )
{
    std::sort( s_vector.begin(), s_vector.end() );
    return s_vector;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)