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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2009, 14:25   #1
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию Регситр букв

С консолью подружился, тут попробовал на билдере,использовать тот же консоль только с эдитами, и уже не работает.
Что я хочу сделать? Я хочу вводить в Эдит1 слово, при нажатии на кнопку, выдавать в Эдит 2 такой резульат. Если буква с маленькой заменить на большую, а если большая, заменить на маленькую. Например, я ввожу слово "Собака" в Edit1, при нажатии на батон1, получить в Edit2 слово "сОБАКА".


Пробывал,валять это в билдере, не получается.

Последний раз редактировалось Syltan; 25.09.2009 в 14:30.
Syltan вне форума Ответить с цитированием
Старый 25.09.2009, 15:02   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Пробывал,валять это в билдере, не получается.
Ну хвастайся. Код в студию - а там посмотрим.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.09.2009, 15:23   #3
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию

Знаю только как на студии в консоле, а на билдере не вкурсе:
Код:
#include <iostream>
#include <ctype.h>
using namespace std;
 
int main()
{
setlocale(0,"");
char *p;
int i;
char str[80] = "Собака";
p = str;
for(i = 0; p[i]; i++) {
if(isupper(p[i]))
p[i] = tolower(p[i]);
else
if(islower(p[i]))
p[i] = toupper(p[i]);
}
 
 
cout<<"Результат\n"<<str;
cin.get();
}
Вроде Edit1->Text нужно использовать, но не очень знаю как сделать. В какие компоненты пихать.

Последний раз редактировалось Syltan; 25.09.2009 в 15:25.
Syltan вне форума Ответить с цитированием
Старый 25.09.2009, 16:04   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ок. Могу предложить такое:
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
 AnsiString s=Edit1->Text,e="";
 for (int i = 1; i <=s.Length(); i++) {
  char c=s[i];
  e+=(isupper(c))?(LowerCase(c)):(UpperCase(c));
 }
 Edit2->Text=e;
}
//---------------------------------------------------------------------------
Код требует оптимизации но в целом идея должне быть ясна.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.09.2009, 16:32   #5
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию

Вот, где-то насдыбал, вот такое:
Код:
Edit2->Text = Edit1->Text.SubString(1,1).LowerCase() + Edit1->Text.SubString(2,Edit1->Text.Length()).UpperCase();
LowerCase() - по ходу функциякоторая делает буквы маленькими,
UpperCase(); - большими. Не в курсе что такое SubString(2
Мне это вариант что-то более нравится. Не могли б вы сказать, что делает SubString(1,1). Зачем идут прибавления.
Пару строк, если кто может по этому коду.

Последний раз редактировалось Syltan; 25.09.2009 в 16:34.
Syltan вне форума Ответить с цитированием
Старый 25.09.2009, 16:43   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Эта функция аналог copy. получает набор символов из позиции длинной указанной во втором параметре.
Помоему такой вариант не лучше... Впрочем если ты его на ноги поставишь пройдет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.09.2009, 17:03   #7
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию

Попробовал ваш код, немного не так, у вас сразу отображается при вводе во 2 эдите, а мне нужно чтоб отобразилось при нажатии кнопки изменения во втором эдите. И работает только если вести один раз слово. Как изменить ваш код,чтобь был наподобии, того, который я нашёл?
Syltan вне форума Ответить с цитированием
Старый 25.09.2009, 17:06   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Syltan
Что мешает делать это в событии OnKeyPress и проверять if (key==13) {Делаем}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.09.2009, 13:53   #9
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию

Вот сделал такой вариант,мне его проще всех понять:
Код:
 char *p;
int i;
  p = Edit1->Text.c_str();
  for(i = 0; p[i]; i++)
  {
    if(isupper(p[i]))
      p[i] = tolower(p[i]);
    else
      if(islower(p[i]))
        p[i] = toupper(p[i]);
  }
  Edit2->Text=p;
c_str(); - это функция преоброзования строки в символьный тип.
Вроде так как я хотел, но дело в том,что программа ,скомпилится, но при вводе "Я", в маленькую "я", не преобразует. Может подскажите,преобразователь в unsigned char ?При преобразовании в этот тип всё выводит нормально,как в консольном варианте.
Ещё, программа работает только один раз, при вводе 2-ой раз в Эдит, слова, и нажатии кнопки батон, программа просто выводит всё то,что я ввёл в Эдит1, то и выводит в Эдит2 без изменения.

Последний раз редактировалось Syltan; 26.09.2009 в 14:22.
Syltan вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена букв! kykysya Общие вопросы Delphi 17 18.10.2010 21:17
Замена букв rasti6ka Паскаль, Turbo Pascal, PascalABC.NET 1 17.05.2009 15:24
Уменьшения букв в тексте igordeg Паскаль, Turbo Pascal, PascalABC.NET 1 07.11.2008 10:32
Прорисовка букв Миша Помощь студентам 3 19.05.2008 19:46
Количество букв! Marsik Помощь студентам 2 27.03.2008 19:18