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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2012, 20:57   #1
drinkyahoo
Новичок
Джуниор
 
Регистрация: 18.01.2012
Сообщений: 2
По умолчанию Работа с символьными строками

Задача: ввести любые символы в Edit1.
Если попадается знак '!', то поставить перед ним и после него пробел.
Вывести результат в Edit2.

Суть проблемы.


Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    String s=Edit1->Text;
for (int i=1;i<s.Length();i++)
{
    if(s[i]=='!') s.Insert('  ',i+1);
}
 
Edit2->Text=s;
}
s[i] - индекс строки, или адрес конкретного символа.
В этом случае программа без проблем распознает знак восклицания, и ставит после него пробел.
Но если ввести


Код:
{
    if(s[i]=='!') s.Insert('  ',i-1);
}
По идее программа должна по индексам до знака восклицания ставить пробел, но она просто зависает.
В справочнике s.Insert - команда вставляет символ, начиная с указанного индекса.
Может есть функция "вставить символ до указанного индекса"? Или я ошибся с адресом индекса? Или для билдера 2 последовательно введенных условия неприемлемы?
drinkyahoo вне форума Ответить с цитированием
Старый 19.01.2012, 01:34   #2
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

Ну, на первый взгляд, напоминает гонки за привязанной морковкой: вставляя пробел перед знаком восклицания, его сдвигают, так что следующая итерация приходится на него же. Снова вставляется пробел, снова знак смещается... . Можно попробовать скорректировать и переменную цикла после вставки пробела (i+=1).
nick42 вне форума Ответить с цитированием
Старый 22.01.2012, 01:39   #3
microbit
Форумчанин
 
Аватар для microbit
 
Регистрация: 26.09.2011
Сообщений: 176
По умолчанию

что мешает удалить символ '!', а на его место вставить " ! "
Код:
{
   if(s[i] == '!')
   {
     s.Delete(i,1);
     s.Insert(" ! ",i);
     i++;
   }
}
microbit вне форума Ответить с цитированием
Старый 22.01.2012, 01:42   #4
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Ну раз пошла такая пьянка
http://blog.kislenko.net/show.php?id=413
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа символьными данными Сайын Помощь студентам 7 05.05.2011 08:19
Работа с символьными цепочками antakov87 Паскаль, Turbo Pascal, PascalABC.NET 5 17.02.2011 11:14
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
Работа с числовыми и символьными массивами sssnake13 Паскаль, Turbo Pascal, PascalABC.NET 7 22.04.2010 11:06
Pascal.работа с символьными массивами и строками Иришка1989 Помощь студентам 3 19.01.2010 01:05