Читайте также:
|
|
Функция | Синтаксис / Описание | Файл |
AdjustLineBreaks | System::AnsiString AdjustLineBreaks(const System::AnsiString S) Заменяет в S символы конца строки на CR/LF -стандартные для Unix | SysUtils.hpp |
AnsiCompareStr | int AnsiCompareStr(const System::AnsiString SI, const System::AnsiString S2) Сравнивает строки 81и S2 с учетом регистра; результат < 0 при Sl< S2, = 0 при Sl= S2, > 0 при Sl> S2 | SysUtils.hpp |
AnsiCompareText | int AnsiCompareText (const System::AnsiString SI, const System::AnsiString S2) Сравнивает строки 81и S2 без учета регистра; результат < 0 при Sl< S2, = 0 при Sl= S2, > 0 при Sl> S2 | SysUtils.hpp |
AnsiExtractQuotedStr | System::AnsiString AnsiExtractQuotedStr(char * &Src, char Quote) Возвращает строку Src с удаленными из ее начала и конца символами кавычек, заданными как Quote, и с заменой внутри двойных кавычек на одинарные | SysUtils.hpp |
AnsiLowerCase | System::AnsiString AnsiLowerCase(const System::AnsiString S) Возвращает строку S, приведенную к нижнему регистру (работает с кириллицей) | SysUtils.hpp |
AnsiPos | int AnsiPos(const System::AnsiString Substr, const System::AnsiString S) Возвращает позицию начала подстроки Substr в S или 0 | SysUtils.hpp |
AnsiQuotedStr | System::AnsiString AnsiQuotedStr(const System::AnsiString S, char Quote) Возвращает строку S со вставленными в ее начало и конец символами кавычек, заданными как Quote, и с заменой внутри строки одинарных кавычек на двойные | SysUtils.hpp |
AnsiUpperCase | System::AnsiString AnsiUpperCase(const System::AnsiString S) Возвращает строку S, приведенную к верхнему регистру (работает с кириллицей) | SysUtils.hpp |
IsDelimiter | bool IsDelimiter(const System::AnsiString Delimiters, const System::AnsiString S, int Index) Определяет, является ли символ с индексом Index в строке S одним из разделителей, указанных в строке Delimiters | SysUtils.hpp |
IsPathDelimiter | bool IsPathDelimiter(const System::AnsiString S, int Index); Определяет, является ли символ с индексом Index в строке S обратным слэшем '\', используемым для задания путей к файлам | SysUtils.hpp |
LastDelimiter | int LastDelimiter(const System::AnsiString Delimiters, const System::AnsiString S) Возвращает индекс последнего вхождения в строку S одного из разделителей, указанных в строке Delimiters | SysUtils.hpp |
LowerCase | System::AnsiString LowerCase(const System::AnsiString S) Возвращает строку S, приведенную к нижнему регистру (для кириллицы используйте AnsiLowerCase) | SysUtils.hpp |
QuotedStr | System::AnsiString QuotedStr(const System::AnsiString S) Возвращает строку S со вставленными в ее начало и конец символами одинарных кавычек и с заменой внутри строки одинарных кавычек на двойные (для многобайтных символов используйте AnsiQuotedStr) | SysUtils.hpp |
StringReplace | System::AnsiString StringReplace(const System::AnsiString S,const System::AnsiString OldPattern, const System::AnsiString NewPattern, TReplaceFlags Flags)Возвращает строку S с заменой подстроки OldPattern на NewPattern; Flags управляет заменами подстрок | SysUtils.hpp |
Trim | System::AnsiString Trim(const System::AnsiString S) Возвращает строку S с удаленными начальными и конечными пробельными и управляющими символами | SysUtils.hpp |
TrimLeft | System::AnsiString TrimLeft(const System::AnsiString S) Возвращает строку S с удаленными начальными пробельными и управляющими символами | SysUtils.hpp |
TrimRight | System::AnsiString TrimRight(const System::AnsiString S) Возвращает строку S с удаленными конечными пробельными и управляющими символами | SysUtils.hpp |
UpperCase | System::AnsiString UpperCase(const System::AnsiString S) Возвращает строку S, приведенную к верхнему регистру (для кириллицы используйте AnsiUpperCase) | SysUtils.hpp |
WrapText | System::AnsiString WrapText const System::AnsiString Line, const System::AnsiString BreakStr, const TSysCharSet &BreakChars, int MaxCoI) Возвращает текст Line, разбитый на строки длиной до MaxCol вставкой символов BreakStr и заменой на них символов множества BreakChars | SysUtils.hpp |
Комментарии
Все функции, оперирующие со строками типа AnsiString, учитывают локализацию и поэтому могут с равным успехом работать как для латинских букв, так и для кириллицы. В этом их большое преимущество перед многими функциями, работающими со строками типа char *.
Несколько замечаний о приведенных в таблице функциях. В функциях IsDelimiter и IsPathDelimiter индексы отсчитываются от 1 (вопреки утверждениям встроенной справки C++Builder). Соответственно 1 — это первый символ строки, 2 — второй и т.д.
Функция IsDelimiter удобна для просмотра всех символов строки и замены каких-то одних символов на другие. Например, код
AnsiString S, Delimiters;
Delimiters = "'";
S =...;
for(int i = 1; i <= StrLen(S.c_str()); i++)
if(IsDelimiter(Delimiters,S,i)) S[i] = "";
заменит в строке S все символы одинарных кавычек на двойные кавычки.
В этой функции в строке Delimiters не обязательно должны быть именно разделители. В нее могут быть занесены любые символы. Например, если приведенный код изменить следующим образом:
AnsiString S, Delimiters; Delimiters = "123456789"; S =...;
for(int i = 1; i <= StrLen(S.c_str()); i++) if(IsDelimiter(Delimiters,S,i)) S[i] -= 1;
то все символы цифр в строке, кроме 0, будут уменьшены на 1.
Функция StringReplace возвращает строку S с заменой подстроки OldPattern на NewPattern. Если параметр Flags не включает флаг rfReplaceAll, то функция заменят только первое вхождение подстроки OldPattern. Если параметр Flags включает флаг rfIgnoreCase, то операции выполняются без учета регистра. Например, оператор
S1 = StringReplace(S, OldPattern, NewPattern,
TReplaceFlags () «rfReplaceAll);
поместит в строку S1 текст строки S с заменой в ней всех подстрок OldPattern на NewPattern.
Функция WrapText разбивает заданный текст Line на строки. В качестве символов конца строки используются символы, заданные параметром BreakStr. Параметр MaxCol задает максимальное количество символов в строке. Разбиение на строки производится вставкой BreakStr после одного из символов, имеющихся в множестве BreakChars. Вставка производится после того из символов в текущей строке, который обеспечивает ее максимальную длину в пределах MaxCol. Если ни одного символа из BreakChars не встретилось, длина строки может превысить MaxCol. Например, операторы
TSysCharSet bchars;
bchars «' ' «'.' «',' «';' «'+' «'-';
AnsiString S, S1;
S =...;
S1 = WrapText(S, "\n\r", bchars, 10);
обеспечивают запись в S1 текста S, разбитого на строки длиной до 10 символов, причем разбиение проводится после пробелов и знаков пунктуации. Если в S записать текст: «Этот тест показывает разбиение на строки, в частности — на символах + и —.», то результат будет следующим:
"Этот тест " "показывает " "разбиение "
"на строки," и в ••
"частности " "- на " "символах +" " и -. "
Можно заметить, что вторая строка содержит 11 символов, включая пробел, т.е. ее размер больше заданного.
Конечно, в этом примере указана очень маленькая длина строки и поэтому разбиение выглядит не красиво. При нормальной для печати длине строк разбиение получается лучше.
Пример 2.1. Дана строка символов (считывается с Edit1). Группа символов между пробелами считается словом.
Рисунок-28. Исходная форма
1.Подсчитать количество слов в строке.
Из условия понятно, что задачу можно решить, перебирая строку посимвольно. Сравнивая каждый символ с пробелом, можно подсчитать их количество. Количество слов будет на одно больше. Например, строка «МАМА МЫЛА РАМУ» содержит два пробела и три слова. Программу можно записать так:
for (i=1;i<=StrLen(st.c_str());i++)
if (IsDelimiter(del,st,i)) k++;
Edit3->Text=IntToStr(k+1);
2.Определить, длину строки
i=st.Length(); // или i=StrLen(st.c_str());
Edit4->Text=IntToStr(i);}
3.Сколько раз в тексте встречается подстрока S2.
s2=Edit2->Text;
i=st.AnsiPos(s2);
while (i)
{ k++;
n+= i+s2.Length();
i=st.SubString(n,255).Pos(s2); }
Edit5->Text=IntToStr(k);
Дата добавления: 2015-11-04; просмотров: 161 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Лабораторная работа № 7 | | | Лаборатоная работа № 8 |