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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, си плюс плюс




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Урок 5. Статика C#
Урок 2. C# комментарии
С. Визгорев - AI Factory's Chess, уровень 10, 10 мая 2016