Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование строки в массив (C++) 
:(
    Опции темы
YuryShabalin
Дата 16.2.2012, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 16.2.2012

Репутация: нет
Всего: нет



Здравствуйте, уважаемые!
Я новичок в C++, и при решении такой задачи у меня возникли трудности:
В поле Edit4 вводим текст на русском языке,длинной 16 символов, далее нам необходимо в соответствии с определённой таблицей перевести этот текст в массив из шестнадцатеричных чисел ( для дальнейшего удобства их использования). у меня получилось следующее:

Код:
Код



void __fastcall TForm1::Button3Click(TObject *Sender)
{
AnsiString Rus = "абвгдеёжзийклмнопрстуфхцчшщыьъэюя"
                 "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЪЭЮЯ" ;
AnsiString Eng[66] = { "01", "02", "03", "04", "05", "06", "07", "08", "09", "0A",  "0B", "0C", "0D", "0E", "0F",
                       "10", "11","12", "13", "14", "15", "16", "17", "18", "19","1A", "1B", "1C", "1D", "1E", "1F",
                        "20", "21",
                        "01", "02", "03", "04", "05", "06", "07", "08", "09", "0A", "0B", "0C", "0D", "0E", "0F",
                       "10", "11","12", "13", "14", "15", "16", "17", "18", "19","1A", "1B", "1C", "1D", "1E", "1F",
                        "20", "21"};  //Собственно эта таблица
AnsiString S1 = Edit4->Text; //Замена русского текста в соотв. с таблицей
AnsiString S2;
int Ind;
 for (int i=1; i<= S1.Length(); i++)
  if (Ind = Rus.Pos(S1[i]))
   S2 += Eng[Ind - 1];
  else S2 += S1[i];

Edit5->Text = S2;            //Вывод полученного значения


Таким образом при введении 16 русских букв у меня получается строка из 32 символов. Мне же необходимо получить ещё и массив из 16 элементов. То есть, если я введу "АБВ" то мне нужно получить массив,первым элементом которого будет: "01", вторым "02" третьим "03" и всё это в шестнадцатеричном формате.
Надеюсь я всё нормально объяснил)) Спасибо, буду ждать помощи и советов! 

Это сообщение отредактировал(а) YuryShabalin - 16.2.2012, 15:21
PM MAIL   Вверх
t_gran
Дата 17.2.2012, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

Репутация: 1
Всего: 37



YuryShabalin, а зачем вводить массив Eng? Можно же и без него спокойно обойтись. Ведь по сути, эти числа есть порядковые номера только представленные а hex-виде. Так может просто хранить в массиве индекс буквы, а как только необходимо будет её показать, вы сразу же конвертнёте dec->hex. Ну к примеру вот так:
Код

#include <iostream>
#include <iomanip>
#include <string>
#include <vector>

using namespace std;

int main()
{
   // Ваша таблица
   const string rus = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
                      "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЪЭЮЯ";

   string text = "аБв";
   // Тут будем хранить результат
   vector<size_t> array;

   size_t ind;

   for (size_t i=0; i<text.size(); ++i)
   {
      // Если находим знакомую букву
      if ((ind = rus.find(text[i])) != string::npos)
      {
         // Добавляем её порядковый номер в массив.
         // Т.к. нам регистр не важен, то пользуемся только
         // первой частью таблицы.
         array.push_back((ind+1) % 33);
      }
   }

   // Выводим значения массива в hex виде
   for (size_t i=0; i<array.size(); ++i)
   {
      // Добавляем ноль если нужно
      cout << ((array[i]<0xF) ? "0" : "") << hex << array[i];
   }
   cout << endl;

   return 0;
}

user posted image

Это сообщение отредактировал(а) t_gran - 17.2.2012, 08:03

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  test.7z 116,83 Kb


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
YuryShabalin
Дата 17.2.2012, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 16.2.2012

Репутация: нет
Всего: нет



t_gran, Спасибо огромное,что откликнулись! Только вот такая проблема,мне нужно,что бы в массиве хранились именно Hex значения и так,как в таблице...
 Показывать можно и через String,это не принципиально, главное чтобы в массиве были такие элементы(табличные 01 02 и тд),чтобы в дальнейшем с ним работать! 
PM MAIL   Вверх
t_gran
Дата 20.2.2012, 04:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

Репутация: 1
Всего: 37



YuryShabalin, ну если даже так, то в чём проблема? Делайте так:
Код

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

using namespace std;

int main()
{
   const string CRus = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
                       "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЪЭЮЯ";

   const string CEng[66] = {"01", "02", "03", "04", "05", "06", "07", "08", "09", "0A", "0B",
                            "0C", "0D", "0E", "0F", "10", "11", "12", "13", "14", "15", "16", 
                            "17", "18", "19", "1A", "1B", "1C", "1D", "1E", "1F", "20", "21",
                            "01", "02", "03", "04", "05", "06", "07", "08", "09", "0A", "0B",
                            "0C", "0D", "0E", "0F", "10", "11", "12", "13", "14", "15", "16",
                            "17", "18", "19", "1A", "1B", "1C", "1D", "1E", "1F", "20", "21"};                      
                      
   string text = "аБв";

   vector<string> array;

   size_t ind;

   for (size_t i=0; i<text.size(); ++i)
   {
      if ((ind = CRus.find(text[i])) != string::npos)
      {
         array.push_back(CEng[ind]);
      }
   }

   for (size_t i=0; i<array.size(); ++i)
   {
      cout << array[i];
   }
   cout << endl;

   return 0;
}


Это сообщение отредактировал(а) t_gran - 20.2.2012, 04:19


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0919 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.