Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2012, 15:32   #1
Tiva
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 49
По умолчанию смена регистра в tmemo

по нажатию на кнопку, из поля мемо1 текст должен быть изменен(в зависимости от выбора в комбобоксе) и измененный скопирован в мемо2
комбобокс:
0 - верхний регистр
1 - нижний
2 - смешанный случайный

верхний, нижний работает. случайный - в мемо2 выводится какой-то бред, например 1S4 и два квадратика

Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	AnsiString str1, rnd, str2, cmb1;
	int len,key=-1,i;
	char *c, *keystr;

	randomize();
	switch(ComboBox1->ItemIndex)
	{
	  case 0: Memo2->Text = Memo1->Text.UpperCase();
		break;
	  case 1: Memo2->Text = Memo1->Text.LowerCase();
		break;
	  case 2:
	  {
			rnd=Memo1->Text;
			Memo2->Text = rnd[1]; // ошибка кодировки, вместо одного
//русского символа копируется квадратик, с английским все нopмально
			len=Memo1->GetTextLen();
			c=new char [len];
			keystr=new char [1];

			for (i=0; i<len; i++)
			{
			 key=rand()%1; // создаем случайный 1 или 0
					//Memo2->Lines->Append(key);
			 sprintf(c, "%d", key); //преобразуем int в char
			 if (key[i]==1) keystr[0]='1';
			 if (key[i]==0) keystr[0]='0';
			 strcat(c, keystr); // склеиваем все 1 и 0 в одну строку

			}
			Memo2->Lines->Append(keystr);
// чтоб проверить работает, или нет, выводим строку "101110010001" в мемо2, и выводится совсем не то.

	  }
	}


	delete c;
	c=0;
	delete keystr;
	keystr=0;
}
Tiva вне форума Ответить с цитированием
Старый 25.04.2012, 15:38   #2
Tiva
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 49
По умолчанию

itoa(key,c,10);


используя эту функцию, все равно выводится тоже самое, 1S4квадратики
Tiva вне форума Ответить с цитированием
Старый 25.04.2012, 16:26   #3
Drugnir
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 262
По умолчанию

Для работы с русскими символами, попробуйте привести в AnsiString символы с которыми работаете, правда неудобно как-то.
Код:
AnsiString rnd = AnsiString(Memo1->Text)
У Memo1->Text тип UnicodeString, а у rnd - AnsiString. Типы не соответствуют немного.

Последний раз редактировалось Drugnir; 25.04.2012 в 16:37.
Drugnir вне форума Ответить с цитированием
Старый 25.04.2012, 16:44   #4
Tiva
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 49
По умолчанию

результат тот же самый...


а какие лучше использовать объекты в билдере для удобной работы с текстом из них? и проблем с кодировкой чтоб не было. просто tmemo только ансистринг проглатывает
Tiva вне форума Ответить с цитированием
Старый 25.04.2012, 16:51   #5
Drugnir
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 262
По умолчанию

Цитата:
Сообщение от Tiva Посмотреть сообщение
результат тот же самый...


а какие лучше использовать объекты в билдере для удобной работы с текстом из них? и проблем с кодировкой чтоб не было. просто tmemo только ансистринг проглатывает
Не только AnsiString, у него вообще UnicodeString используется.
Для работы и форматирования текста лучше RichEdit использовать.
Drugnir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смена регистра у текста в кавычка после заданного слова berezka04 Microsoft Office Word 18 26.09.2011 09:43
Преобразовать все буквы нижнего регистра в буквы верхнего регистра druger Помощь студентам 5 18.09.2011 17:27
Содержимое регистра AL Cpluser Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 21.01.2011 06:14
Смена регистра Last Microsoft Office Excel 6 12.08.2009 14:52