C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Работа со строкой, поиск
Лена
Отправлено: 18.09.2006, 16:00


Мастер участка

Группа: Участник
Сообщений: 501



После программного формирования строки, она может иметь одну, две, три и т.д. или не одной запятой. Как найти именно последнюю запятую и удалить ее?
Doga
Отправлено: 18.09.2006, 16:50


Мастер участка

Группа: Участник
Сообщений: 575



Привет!

Может, вот это подойдёт:

QUOTE

Returns the byte index in S of the last character that matches any character in the Delimiters AnsiString.

Unit

SysUtils

Category

string handling routines

extern PACKAGE int __fastcall LastDelimiter(const AnsiString Delimiters, const AnsiString S);

Description

Call LastDelimiter to locate the last delimiter in S. For example, the line

MyIndex = LastDelimiter("\.:","c:\filename.ext");

sets MyIndex to 12.

When working with multi-byte character sets (MBCS), S may contain double byte characters, but the delimiters listed in the Delimiters parameter must all be single byte non-null characters.


И для удаления можно вот это:

QUOTE

Removes a specified number of characters from the string.

AnsiString& __fastcall Delete(int index, int count);

Description

Delete modifies the AnsiString to remove count characters from the string beginning with the character at index, where 1 is the index of the first character. It returns the resulting modified string (*this).

If index is larger than the length of the AnsiString or less than 1, no characters are deleted.

If count specifies more characters than remain starting at the index, Delete removes the rest of the string. If count is less than 0, no characters are deleted.


Отредактировано Doga — 18.09.2006, 16:56
Лена
Отправлено: 18.09.2006, 17:11


Мастер участка

Группа: Участник
Сообщений: 501



Правильно ли я поняла: rolleyes.gif
Допустим, строка с запятыми имеет имя AnsiString AllParam.
После ee формирования пишем:
int pos = AllParam.LastDelimiter(“,” );
AllParam.Delete(pos,1);

Doga
Отправлено: 18.09.2006, 17:18


Мастер участка

Группа: Участник
Сообщений: 575



Не, немного не так:

CODE

int pos = LastDelimiter(“,”, AllParam);
AllParam.Delete(pos, 1);


smile.gif

Отредактировано Doga — 18.09.2006, 17:19
Лена
Отправлено: 18.09.2006, 17:42


Мастер участка

Группа: Участник
Сообщений: 501



Спасибо! victory.gif

P.S.
Странно, но мой код:
int pos = AllParam.LastDelimiter(“,” );
AllParam.Delete(pos,1);
тоже работает. ohmy.gif
Doga
Отправлено: 18.09.2006, 17:53


Мастер участка

Группа: Участник
Сообщений: 575



Всё правильно, LastDelimiter существует и как самостоятельный метод, и как метод класса AnsiString.

Это я лохтер rolleyes.gif
Лена
Отправлено: 18.09.2006, 18:03


Мастер участка

Группа: Участник
Сообщений: 501



Спасибо за помощь и разъяснения! smile.gif
Valdemar
Отправлено: 19.09.2006, 07:23


Мастер участка

Группа: Участник
Сообщений: 433



А еще есть функция StrRScan, которая возвращает последнее вхождение символа в строку.
Doga
Отправлено: 19.09.2006, 18:22


Мастер участка

Группа: Участник
Сообщений: 575



То же вариант, если строка типа char*

Вернуться в Вопросы программирования в C++Builder