C++: String в string и нахождение позиции символа
Эта заметка продолжит цикл по преобразованию типов. В ней мы научимся преобразовывать System::String (String ^) в std::string (стандартную строку), а также находить символ в этой самой преобразованной строке.
В одной из своих программ (конкретно – написание калькулятора) я столкнулся с тем, что надо получить содержимое поля, а затем проверить, есть ли в нем запятая. Это требуется для того, что в числе может быть только одна запятая (точка) для разделения целой и дробной части числа. Да-да, задачу можно решить и по-другому, например, создать специальный флаг – нажата ли клавиша запятой – но мне захотелось вот так.
Итак, сама функция по приведению System::String к типу std::string выглядит вот так:
void MarshalString ( String ^ s, string& os ) { using namespace Runtime::InteropServices; const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer(); os = chars; Marshal::FreeHGlobal(IntPtr((void*)chars)); }А теперь применим эту функцию на практике. Получим содержимое текстового поля и проверим, есть и в нем определенный символ, в данном случае – запятая:
String^ s = textBox1->Text; string s2 = ""; MarshalString(s, s2); int pos = s2.find(",") ; if (pos==-1) MessageBox::Show("Есть!", "Запятая",MessageBoxButtons::OK,MessageBoxIcon::Asterisk); else MessageBox::Show("Нет!", "Запятая",MessageBoxButtons::OK,MessageBoxIcon::Asterisk);Код на самом деле довольно прост и, как я думаю, в комментариях не нуждается. Единственно, что может быть непонятно - это переменная pos - в неё мы пишем номер позиции найденного символа. Если она равняется "-1", то такого символа, увы, в данной строке нет. На всякий случай напоминаю, что нумерация символов начинается с нуля.
Если же вам что-то все же непонятно, или требуется написать программу на C++, то вы можете обратиться ко мне. Пишите – и за некоторую сумму денег я вам помогу. Быстро, недорого и квалифицированно.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.