Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Замена символа в переменной


Автор: vino 15.5.2008, 13:25
Подскажите,как мне заменить в переменной символ КАВЫЧКИ на пробел или просто убрать символ КАВЫЧКИ.Спасибо.

Автор: LastAngel 15.5.2008, 13:49
Код

  AnsiString str = "sg\"df\"dsg";
  char* pcBuf = str.c_str();
  for(int i = 0; i < str.Length(); i++)
  {
    if(pcBuf[i] == '\"')
    {
      pcBuf[i] = ' ';
    }
  }
 // str = pcBuf;
 // memo->Lines->Add(str);


ну или стандартной функцией StringReplace  smile 

Автор: 586 15.5.2008, 14:11
LastAngel, AnsiString с единицы нумеруется, а не с нуля.

Автор: dumb 15.5.2008, 14:12
Цитата(LastAngel @  15.5.2008,  14:49 Найти цитируемый пост)
char* pcBuf = str.c_str();
так нельзя. да и зачем вообще?

Код

  AnsiString str = "sg\"df\"dsg";
//1 вариант - более понятный новичку, да и быстрее он
  for(int i = 1; i <= str.Length(); i++)
    if(str[i] == '\"')
      str[i] = ' ';
//2 вариант - более универсальный(позволяет заменять подстроки, а не только символы), но и более медленный
  str = StringReplace(str, "\"", " ", TReplaceFlags() << rfReplaceAll);

Автор: mrbrooks 15.5.2008, 15:03
Если это не критично для vino то можно использовать стандартную функцию Бормана StringReplace

Код

String str = "Hello:fucking:world:", str1;
str1 = StringReplace(str,':',"",TReplaceFlags()<<rfReplaceAll);
ShowMessage(str1);


Ответ - Hellofuckingworld

Автор: LastAngel 15.5.2008, 15:10
Цитата(dumb @ 15.5.2008,  14:12)
так нельзя. да и зачем вообще?


кто сказал что так нельзя ?? объясните-ка )) очень интересно

Добавлено через 2 минуты и 52 секунды
Цитата(586 @ 15.5.2008,  14:11)
LastAngel, AnsiString с единицы нумеруется, а не с нуля.

работа идёт с чаром,а не с анси ... смотри внимательнее 

Автор: Rififi 15.5.2008, 15:20
Цитата(LastAngel @  15.5.2008,  15:10 Найти цитируемый пост)
кто сказал что так нельзя ??

Стандарт, естессно, кто же ещё?
читаем 21.3.6

Автор: LastAngel 15.5.2008, 15:23
Цитата(Rififi @ 15.5.2008,  15:20)
Стандарт, естессно, кто же ещё?

т.е. хочешь сказать это не будет работать?

Автор: Rififi 15.5.2008, 15:26
*That*, Detective, is the right question. © I, Robot.

Автор: LastAngel 15.5.2008, 15:31
Цитата(Rififi @ 15.5.2008,  15:26)
*That*, Detective, is the right question. © I, Robot.

хочу огорчить, это полностью рабочий вариант ...

Автор: dumb 15.5.2008, 15:34
хотя стандарт для AnsiString не указ, но ничто человеческое ему не чуждо. жмем F1 на c_str и читаем.

Цитата(LastAngel @  15.5.2008,  16:31 Найти цитируемый пост)
хочу огорчить, это полностью рабочий вариант...
а нам-то чего огорчаться? мы только посочувствовать пользователям твоего кода можем...

Автор: Rififi 15.5.2008, 15:38
Цитата(LastAngel @  15.5.2008,  15:31 Найти цитируемый пост)
хочу огорчить, это полностью рабочий вариант ... 

чужой кривой код - это не повод для огорчения, если только не мне его саппортить.

Автор: LastAngel 15.5.2008, 15:42
какие то глупые выводы .... что кривого в коде ... если при выделении памяти идёт инициализация объекта то выделяется столько памяти сколько надо,т.е. сколько будет проинициализирвоано ... обидно что основ языка не знают люди ...

Автор: vladimir_ad 16.5.2008, 13:37
LastAngel,  не кипятись. Удивительно что AnsiString::c_str() возвращает не const char* в отличии от реализации в stl.
Может быть потому, что AnsiString реализована на паскале.?.
В твоем примере нет изменения размера строки и ничего страшного не произойдет. Однако в других случаях может привести к ошибке
работы AnsiString или нарушению памяти.

Автор: 586 16.5.2008, 14:16
Цитата(vladimir_ad @  16.5.2008,  14:37 Найти цитируемый пост)
Удивительно что AnsiString::c_str() возвращает не const char* в отличии от реализации в stl.
Может быть потому, что AnsiString реализована на паскале.?.

Я думаю, это ошибка в заголовке. Там после этого метода идёт метод, который возвращает константный указатель.
Цитата(dstring.h @  line 160)
    // C string operator
    char* __fastcall c_str() const        { return (Data)? Data: "";}

    // Read access to raw Data ptr.  Will be NULL for an empty string.
    const void* __fastcall data() const   { return Data; }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)