Класс CStringT
Этот класс представляет CStringT
объект.
Синтаксис
template<typename BaseType, class StringTraits>
class CStringT :
public CSimpleStringT<BaseType,
_CSTRING_IMPL_::_MFCDLLTraitsCheck<BaseType, StringTraits>::c_bIsMFCDLLTraits>
Параметры
BaseType
Тип символа класса строки. Может применяться один из перечисленных ниже типов.
char
(для строк символов ANSI).wchar_t
(для строк символов Юникода).TCHAR
(для строк символов ANSI и Юникода).
StringTraits
Определяет, требуется ли поддержка библиотеки времени выполнения C (CRT) и где находятся строковые ресурсы. Может применяться один из перечисленных ниже типов.
StrTraitATL<wchar_t | char | TCHAR, ChTraitsCRT<wchar_t | char | TCHAR>>
Для этого класса требуется поддержка CRT и поиск строк ресурсов в модуле, заданном
m_hInstResource
(членом класса модуля приложения).StrTraitATL<wchar_t | char | TCHAR, ChTraitsOS<wchar_t | char |TCHAR>>
Класс не требует поддержки CRT и ищет строки ресурсов в модуле, указанном
m_hInstResource
(член класса модуля приложения).StrTraitMFC<wchar_t | char | TCHAR, ChTraitsCRT<wchar_t | char | TCHAR>>
Для этого класса требуется поддержка CRT и поиск строк ресурсов с помощью стандартного алгоритма поиска MFC.
StrTraitMFC<wchar_t | char | TCHAR, ChTraitsOS<wchar_t | char | TCHAR>>
Класс не требует поддержки CRT и ищет строки ресурсов с помощью стандартного алгоритма поиска MFC.
Участники
Открытые конструкторы
Имя | Описание |
---|---|
CStringT::CStringT |
CStringT Создает объект различными способами. |
CStringT::~CStringT |
Уничтожает объект CStringT . |
Открытые методы
Имя | Описание |
---|---|
CStringT::AllocSysString |
Выделяется BSTR из CStringT данных. |
CStringT::AnsiToOem |
Выполняет преобразование на месте из символа ANSI в набор символов OEM. |
CStringT::AppendFormat |
Добавляет форматированные данные к существующему CStringT объекту. |
CStringT::Collate |
Сравнивает две строки (учитывает регистр, использует сведения о языковом стандарте). |
CStringT::CollateNoCase |
Сравнивает две строки (без учета регистра, использует сведения о языковом стандарте). |
CStringT::Compare |
Сравнивает две строки (учитывает регистр). |
CStringT::CompareNoCase |
Сравнивает две строки (без учета регистра). |
CStringT::Delete |
Удаляет символ или символы из строки. |
CStringT::Find |
Находит символ или подстроку внутри большей строки. |
CStringT::FindOneOf |
Находит первый соответствующий символ из набора. |
CStringT::Format |
Форматирует строку как sprintf это делает. |
CStringT::FormatMessage |
Форматирует строку сообщения. |
CStringT::FormatMessageV |
Форматирует строку сообщения с помощью списка аргументов переменной. |
CStringT::FormatV |
Форматирует строку с помощью списка аргументов переменной. |
CStringT::GetEnvironmentVariable |
Задает строку значению указанной переменной среды. |
CStringT::Insert |
Вставляет один символ или подстроку по заданному индексу в строке. |
CStringT::Left |
Извлекает левую часть строки. |
CStringT::LoadString |
Загружает существующий CStringT объект из ресурса Windows. |
CStringT::MakeLower |
Преобразует все символы в этой строке в строчные символы. |
CStringT::MakeReverse |
Отменяет строку. |
CStringT::MakeUpper |
Преобразует все символы в этой строке в прописные символы. |
CStringT::Mid |
Извлекает среднюю часть строки. |
CStringT::OemToAnsi |
Выполняет преобразование на месте из символа OEM в набор символов ANSI. |
CStringT::Remove |
Удаляет указанные символы из строки. |
CStringT::Replace |
Заменяет указанные символы другими символами. |
CStringT::ReverseFind |
Находит символ внутри большей строки; начинается с конца. |
CStringT::Right |
Извлекает правую часть строки. |
CStringT::SetSysString |
Задает существующий BSTR объект с данными CStringT из объекта. |
CStringT::SpanExcluding |
Извлекает символы из строки, начиная с первого символа, которые не указаны в наборе символов, определенных pszCharSet . |
CStringT::SpanIncluding |
Извлекает подстроку, содержащую только символы в наборе. |
CStringT::Tokenize |
Извлекает указанные маркеры в целевой строке. |
CStringT::Trim |
Обрезает все начальные и конечные пробелы из строки. |
CStringT::TrimLeft |
Обрезает ведущие символы пробелов из строки. |
CStringT::TrimRight |
Обрезает конечные символы пробелов из строки. |
Операторы
Имя | Описание |
---|---|
CStringT::operator = |
Назначает новое значение объекту CStringT . |
CStringT::operator + |
Объединяет две строки или символ и строку. |
CStringT::operator += |
Объединяет новую строку с концами существующей строки. |
CStringT::operator == |
Определяет, равны ли две строки логически. |
CStringT::operator != |
Определяет, не совпадают ли две строки логически. |
CStringT::operator < |
Определяет, меньше ли строка в левой части оператора, чем строка справа. |
CStringT::operator > |
Определяет, больше ли строка в левой части оператора, чем строка справа. |
CStringT::operator <= |
Определяет, является ли строка в левой части оператора меньше или равно строке справа. |
CStringT::operator >= |
Определяет, больше ли строка в левой части оператора или равна строке справа. |
Замечания
CStringT
наследуется от CSimpleStringT
класса. Расширенные функции, такие как манипуляция символами CStringT
, упорядочивание и поиск, реализуются.
Примечание.
CStringT
объекты могут создавать исключения. Это происходит, когда CStringT
объект выходит из памяти по какой-либо причине.
CStringT
Объект состоит из последовательности символов переменной длины. CStringT
предоставляет функции и операторы с использованием синтаксиса, аналогичного базовому. Операторы объединения и сравнения вместе с упрощенным управлением памятью упрощают CStringT
использование объектов, чем обычные массивы символов.
Примечание.
Хотя можно создать CStringT
экземпляры, содержащие внедренные символы NULL, рекомендуется использовать его. Вызов методов и операторов в CStringT
объектах, содержащих внедренные символы NULL, может создавать непреднамеренные результаты.
Используя различные сочетания BaseType
параметров и StringTraits
параметров, CStringT
объекты могут поступать в следующих типах, которые были предопределены библиотеками ATL.
При использовании в приложении ATL:
CString
, CStringA
и CStringW
экспортируются из библиотеки DLL MFC (MFC90.DLL), никогда не из пользовательских библиотек DLL. Это делается, чтобы предотвратить CStringT
определение нескольких раз.
Примечание.
Если код содержит обходной путь для ошибок компоновщика, описанных в разделе "Экспорт строковых классов с помощью CStringT", необходимо удалить этот код. Он больше не требуется.
В приложениях на основе MFC доступны следующие типы строк:
Тип CStringT | Объявление |
---|---|
CStringA |
Строка типа символов ANSI с поддержкой CRT. |
CStringW |
Строка типа символов Юникода с поддержкой CRT. |
CString |
Типы символов ANSI и Юникода с поддержкой CRT. |
Следующие типы строк доступны в проектах, где ATL_CSTRING_NO_CRT
определено:
Тип CStringT | Объявление |
---|---|
CAtlStringA |
Строка типа символов ANSI без поддержки CRT. |
CAtlStringW |
Строка типа символов Юникода без поддержки CRT. |
CAtlString |
Типы символов ANSI и Юникода без поддержки CRT. |
Следующие типы строк доступны в проектах, где ATL_CSTRING_NO_CRT
не определено:
Тип CStringT | Объявление |
---|---|
CAtlStringA |
Строка типа символов ANSI с поддержкой CRT. |
CAtlStringW |
Строка типа символов Юникода с поддержкой CRT. |
CAtlString |
Типы символов ANSI и Юникода с поддержкой CRT. |
CString
Объекты также имеют следующие характеристики:
CStringT
Объекты могут расти из-за операций объединения.CStringT
объекты соответствуют семантике значений.CStringT
Представьте объект как фактическую строку, а не как указатель на строку.Можно свободно заменить
CStringT
объектыPCXSTR
аргументами функции.Настраиваемое управление памятью для строковых буферов. Дополнительные сведения см. в разделе "Управление памятью" и
CStringT
.
Предопределенные типы CStringT
Так как CStringT
используется аргумент шаблона для определения поддерживаемого типа символов ( wchar_t
или char
) типы параметров метода могут быть сложными в разы. Чтобы упростить эту проблему, набор предопределенных типов определяется и используется во всем CStringT
классе. В следующей таблице перечислены различные типы:
Имя | Описание |
---|---|
XCHAR |
Один символ (wchar_t либо) с тем же типом символаCStringT , что и char объект. |
YCHAR |
Один символ ( wchar_t либо) char с противоположным типом символов CStringT в качестве объекта. |
PXSTR |
Указатель на строку символа ( wchar_t или char ) с тем же типом символа CStringT , что и объект. |
PYSTR |
Указатель на строку символа ( wchar_t либо) char с противоположным типом символов CStringT в качестве объекта. |
PCXSTR |
Указатель на const строку символа ( wchar_t или char ) с тем же типом символа CStringT , что и объект. |
PCYSTR |
Указатель на const строку символа ( wchar_t либо) char с противоположным типом символов CStringT в качестве объекта. |
Примечание.
Код, который ранее использовал незадокументированные методы CString
(например AssignCopy
) должен быть заменен кодом, использующим следующие документированные методы CStringT
(например GetBuffer
, или ReleaseBuffer
). Эти методы наследуются от CSimpleStringT
.
Иерархия наследования
CStringT
Требования
Верхний колонтитул | Используется для |
---|---|
cstringt.h |
Объекты строк, доступные только для MFC |
atlstr.h |
Объекты строк, отличные от MFC |
CStringT::AllocSysString
Выделяет строку, совместимую со службой автоматизации, и BSTR
копирует содержимое CStringT
объекта в него, включая завершающийся символ NULL.
BSTR AllocSysString() const;
Возвращаемое значение
Только что выделенная строка.
Замечания
В программах MFC класс создается, CMemoryException
если недостаточно памяти. В программах CAtlException
ATL создается исключение. Эта функция обычно используется для возврата строк для автоматизации.
Как правило, если эта строка передается в com-функцию в качестве [in]
параметра, то для освобождения строки требуется вызывающий объект. Это можно сделать с помощью SysFreeString
пакета SDK для Windows. Дополнительные сведения см. в статье о выделении и освобождении памяти для a BSTR
.
Дополнительные сведения о функциях выделения OLE в Windows см SysAllocString
. в пакете SDK для Windows.
Пример
В следующем примере показано использование функции CStringT::AllocSysString
.
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString str(_T("This is a test string!"));
BSTR bstr = str.AllocSysString();
// bstr now contains "This is a test string!", and can be
// passed to any OLE function requiring a BSTR.
// Normally, if you pass the BSTR, you will
// need to free the string after returning from the function call.
CStringT::AnsiToOem
Преобразует все символы этого CStringT
объекта из набора символов ANSI в набор символов OEM.
void AnsiToOem();
Замечания
Функция недоступна, если _UNICODE
определена.
Пример
// OEM character 252 on most IBM-compatible computers in
// many countries/regions is superscript n, as in 2^n.
// Converting it to the ANSI English charset results in a
// normal character 'n', which is the closest possible
// representation.
CStringT<char, StrTraitATL<char, ChTraitsCRT<char>>> str((WCHAR)252);
str.OemToAnsi();
ASSERT(str[0] == 'n');
// Be aware that in OEM to ANSI conversion the 'n'
// from the previous result cannot be converted back to
// a supsercript n because the system does not know what
// the character's value truly was.
str.AnsiToOem();
ASSERT(str[0] != 252);
ASSERT(str[0] == 'n');
CStringT::AppendFormat
Добавляет форматированные данные к существующему CStringT
объекту.
void __cdecl AppendFormat(PCXSTR pszFormat, [, argument] ...);
void __cdecl AppendFormat(UINT nFormatID, [, argument] ...);
Параметры
pszFormat
Строка элемента управления форматом.
nFormatID
Идентификатор ресурса строки, содержащий строку элемента управления форматом.
argument
Необязательные аргументы.
Замечания
Эта функция форматирует и добавляет в нее ряд символов и значений CStringT
. Каждый необязательный аргумент (при наличии) преобразуется и добавляется в соответствии с соответствующей спецификацией формата в pszFormat
строковом ресурсе, определяемом пользователем nFormatID
.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString str = _T("Some data:\t");
str.AppendFormat(_T("X value = %.2f\n"), 12345.12345);
_tprintf_s(_T("%s"), (LPCTSTR) str);
CStringT::Collate
Сравнивает две строки с помощью функции _tcscoll
универсального текста.
int Collate(PCXSTR psz) const throw();
Параметры
psz
Другая строка, используемая для сравнения.
Возвращаемое значение
Ноль, если строки идентичны, 0, < если этот CStringT
объект меньше psz
или > 0, если этот CStringT
объект больше psz
.
Замечания
Функция универсального текста_tcscoll
, определяемая в TCHAR.H
, сопоставляется с strcoll
или wcscoll
_mbscoll
в зависимости от набора символов, определенного во время компиляции. Каждая функция выполняет сравнение строк с учетом регистра в соответствии с используемой кодовой страницей. Дополнительные сведения см. в разделе strcoll
, _mbscoll
_wcscoll_l
wcscoll
_strcoll_l
_mbscoll_l.
CStringT::CollateNoCase
Сравнивает две строки с помощью функции _tcscoll
универсального текста.
int CollateNoCase(PCXSTR psz) const throw();
Параметры
psz
Другая строка, используемая для сравнения.
Возвращаемое значение
Ноль, если строки идентичны (игнорирующие регистр), 0, < если этот объект меньше psz
(игнорирующий регистр), или > 0, если этот CStringT
CStringT
объект больше psz
(игнорирующий регистр).
Замечания
Функция универсального текста_tcscoll
, определяемая в TCHAR.H
, сопоставляется с stricoll
или wcsicoll
_mbsicoll
в зависимости от набора символов, определенного во время компиляции. Каждая функция выполняет сравнение строк без учета регистра в соответствии с используемой кодовой страницей. Дополнительные сведения см. в разделе strcoll
, wcscoll
, _strcoll_l
_mbscoll
, , _wcscoll_l
. _mbscoll_l
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString str1 = _T("Co-Op");
CAtlString str2 = _T("con");
int n;
// Collation uses language rules, such as ignoring dashes.
// NoCase version ignores case.
n = str1.CollateNoCase(str2);
ASSERT(n < 0);
// Comparison is a strict ASCII comparison with no language rules
// but still ignores case in NoCase version.
n = str1.CompareNoCase(str2);
ASSERT(n < 0);
CStringT::Compare
Сравнивает две строки (учитывает регистр).
int Compare(PCXSTR psz) const;
Параметры
psz
Другая строка, используемая для сравнения.
Возвращаемое значение
Ноль, если строки идентичны, 0, < если этот CStringT
объект меньше psz
или > 0, если этот CStringT
объект больше psz
.
Замечания
Функция универсального текста_tcscmp
, определяемая в TCHAR.H
, сопоставляется с strcmp
или wcscmp
_mbscmp
в зависимости от набора символов, определенного во время компиляции. Каждая функция выполняет сравнение строк с учетом регистра и не влияет на языковой стандарт. Дополнительные сведения см. в разделе strcmp
, _mbscmp
wcscmp
.
Если строка содержит внедренные значения NULL, то для сравнения строка считается усеченной при первом внедренного символа NULL.
Пример
В следующем примере показано использование функции CStringT::Compare
.
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s1(_T("abc"));
CAtlString s2(_T("abd"));
ASSERT(s1.Compare(s2) < 0); // Compare with another CAtlString.
ASSERT(s1.Compare(_T("abe")) < 0); // Compare with LPTSTR string.
CStringT::CompareNoCase
Сравнивает две строки (без учета регистра).
int CompareNoCase(PCXSTR psz) const throw();
Параметры
psz
Другая строка, используемая для сравнения.
Возвращаемое значение
Ноль, если строки идентичны (игнорирующие регистр), 0, <если этот объект меньше psz
(игнорирующий регистр), или >0, если этот CStringT
CStringT
объект больше psz
(игнорирующий регистр).
Замечания
Функция универсального текста_tcsicmp
, определяемая в TCHAR.H
, сопоставляется с _stricmp
_wcsicmp
или _mbsicmp
в зависимости от набора символов, определенного во время компиляции. Каждая функция выполняет сравнение строк без учета регистра. Сравнение зависит от LC_CTYPE
аспекта языкового стандарта, но не LC_COLLATE
. Дополнительные сведения см. в разделе _stricmp
, _wcsicmp
, _stricmp_l
_mbsicmp
, , _wcsicmp_l
. _mbsicmp_l
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s1(_T("abc"));
CAtlString s2(_T("ABD"));
ASSERT(s1.CompareNoCase(s2) < 0); // Compare with a CAtlString.
ASSERT(s1.CompareNoCase(_T("ABE")) < 0); // Compare with LPTSTR string.
CStringT::CStringT
Формирует объект CStringT
.
CStringT() throw() :
CThisSimpleString(StringTraits::GetDefaultManager());
explicit CStringT(IAtlStringMgr* pStringMgr) throw() :
CThisSimpleString( pStringMgr);
CStringT(const VARIANT& varSrc);
CStringT(const VARIANT& varSrc, IAtlStringMgr* pStringMgr);
CStringT(const CStringT& strSrc) :
CThisSimpleString( strSrc);
operator CSimpleStringT<
BaseType,
!_CSTRING_IMPL_::_MFCDLLTraitsCheck<BaseType, StringTraits>
:: c_bIsMFCDLLTraits> &()
template <bool bMFCDLL>
CStringT(const CSimpleStringT<BaseType, bMFCDLL>& strSrc) :
CThisSimpleString( strSrc);
template <class SystemString>
CStringT(SystemString^ pString) :
CThisSimpleString( StringTraits::GetDefaultManager());
CStringT(const XCHAR* pszSrc) :
CThisSimpleString( StringTraits::GetDefaultManager());
CSTRING_EXPLICIT CStringT(const YCHAR* pszSrc) :
CThisSimpleString( StringTraits::GetDefaultManager());
CStringT(LPCSTR pszSrc, IAtlStringMgr* pStringMgr) :
CThisSimpleString( pStringMgr);
CStringT(LPCWSTR pszSrc, IAtlStringMgr* pStringMgr) :
CThisSimpleString( pStringMgr);
CSTRING_EXPLICIT CStringT(const unsigned char* pszSrc) :
CThisSimpleString( StringTraits::GetDefaultManager());
/*CSTRING_EXPLICIT*/ CStringT(char* pszSrc) :
CThisSimpleString( StringTraits::GetDefaultManager());
CSTRING_EXPLICIT CStringT(unsigned char* pszSrc) :
CThisSimpleString( StringTraits::GetDefaultManager());
CSTRING_EXPLICIT CStringT(wchar_t* pszSrc) :
CThisSimpleString( StringTraits::GetDefaultManager());
CStringT(const unsigned char* pszSrc, IAtlStringMgr* pStringMgr) :
CThisSimpleString( pStringMgr);
CSTRING_EXPLICIT CStringT(char ch, int nLength = 1) :
CThisSimpleString( StringTraits::GetDefaultManager());
CSTRING_EXPLICIT CStringT(wchar_t ch, int nLength = 1) :
CThisSimpleString( StringTraits::GetDefaultManager());
CStringT(const XCHAR* pch, int nLength) :
CThisSimpleString( pch, nLength, StringTraits::GetDefaultManager());
CStringT(const YCHAR* pch, int nLength) :
CThisSimpleString( StringTraits::GetDefaultManager());
CStringT(const XCHAR* pch, int nLength, AtlStringMgr* pStringMgr) :
CThisSimpleString( pch, nLength, pStringMgr);
CStringT(const YCHAR* pch, int nLength, IAtlStringMgr* pStringMgr) :
CThisSimpleString( pStringMgr);
Параметры
pch
Указатель на массив символов длины nLength
, не завершаемого значением NULL.
nLength
Количество символов в pch
.
ch
Один символ.
pszSrc
Строка, завершающаяся значением NULL, копируется в этот CStringT
объект.
pStringMgr
Указатель на диспетчер памяти для CStringT
объекта. Дополнительные сведения об IAtlStringMgr
управлении памятью CStringT
и управлении памятью см. в разделе "Управление памятью" с помощью CStringT.
strSrc
Существующий CStringT
объект, скопированный в этот CStringT
объект. Дополнительные сведения и CThisString
CThisSimpleString
сведения см. в разделе "Примечания".
varSrc
Объект variant, копируемый в этот CStringT
объект.
BaseType
Тип символа класса строки. Может применяться один из перечисленных ниже типов.
char
(для строк символов ANSI).
wchar_t
(для строк символов Юникода).
TCHAR
(для строк символов ANSI и Юникода).
bMFCDLL
Логическое значение, указывающее, является ли проект библиотекой DLL () MFC () илиTRUE
нет (FALSE
).
SystemString
Должно быть System::String
, и проект должен быть скомпилирован с /clr
помощью .
pString
Дескриптор CStringT
объекта.
Замечания
Так как конструкторы копируют входные данные в новое выделенное хранилище, исключения памяти могут привести к возникновению. Некоторые из этих конструкторов служат функциями преобразования. Это позволяет заменить, например, LPTSTR
CStringT
место ожидания объекта.
CStringT
( ):LPCSTR
lpsz
создает ЮникодCStringT
из строки ANSI. Этот конструктор также можно использовать для загрузки строкового ресурса, как показано в приведенном ниже примере.CStringT(
LPCWSTR
lpsz
): создает объектCStringT
из строки Юникода.CStringT
():const unsigned char*
psz
позволяет создавать указательCStringT
с указателяunsigned char
на .
Примечание.
Определите макрос, чтобы отключить неявное _CSTRING_DISABLE_NARROW_WIDE_CONVERSION
преобразование строк между ANSI и строками Юникода. Макрос исключается из конструкторов компиляции, поддерживающих преобразование.
Параметр strSrc
может быть либо объектом CStringT
, либо CThisSimpleString
объектом. Для CStringT
этого используйте одно из его экземпляров по умолчанию (CString
, CStringA
или CStringW
); для CThisSimpleString
использования this
указателя. CThisSimpleString
объявляет экземпляр CSimpleStringT
класса, который является меньшим строковым классом с менее встроенными функциями, чем CStringT
класс.
Оператор CSimpleStringT<>&()
перегрузки CStringT
создает объект из CSimpleStringT
объявления.
Примечание.
Хотя можно создать CStringT
экземпляры, содержащие внедренные символы NULL, рекомендуется использовать его. Вызов методов и операторов в CStringT
объектах, содержащих внедренные символы NULL, может создавать непреднамеренные результаты.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s1; // Empty string
CAtlString s2(_T("cat")); // From a C string literal
CAtlString s3 = s2; // Copy constructor
CAtlString s4(s2 + _T(" ") + s3); // From a string expression
CAtlString s5(_T('x')); // s5 = "x"
CAtlString s6(_T('x'), 6); // s6 = "xxxxxx"
CAtlString s7((LPCSTR)ID_FILE_NEW); // s7 = "Create a new document"
VARIANT var;
V_VT(&var) = VT_BSTR;
V_BSTR(&var) = ::SysAllocString(L"Football is a fun sport.");
CAtlString s8(var); // s8 = "Football is a fun sport."
// The following statement does not call the assignment operator.
// The compiler considers the following statement equivalent to
// CAtlString city("Paris")
CAtlString city = _T("Paris");
CStringT::~CStringT
Уничтожает CStringT
объект.
~CStringT() throw();
Замечания
Уничтожает CStringT
объект.
CStringT::Delete
Удаляет символ или символы из строки, начиная с символа в заданном индексе.
int Delete(int iIndex, int nCount = 1);
Параметры
iIndex
Отсчитываемый от нуля индекс первого символа в объекте CStringT
для удаления.
nCount
Число символов, которые нужно удалить.
Возвращаемое значение
Длина измененной строки.
Замечания
Если nCount
значение больше строки, остальная часть строки будет удалена.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString str(_T("Soccer is best, but hockey is quicker!"));
_tprintf_s(_T("Before: %s\n"), (LPCTSTR)str);
int n = str.Delete(6, 3);
_tprintf_s(_T("After: %s\n"), (LPCTSTR)str);
ASSERT(n == str.GetLength());
Before: Soccer is best,
but hockey is quicker!
After: Soccer best,
but hockey is quicker!
CStringT::Find
Выполняет поиск этой строки для первого совпадения символа или подстроки.
int Find(PCXSTR pszSub, int iStart=0) const throw();
int Find(XCHAR ch, int iStart=0) const throw();
Параметры
pszSub
Подстрока для поиска.
iStart
Индекс символа в строке для начала поиска или 0, начинающегося с начала.
ch
Один символ для поиска.
Возвращаемое значение
Отсчитываемый от нуля индекс первого символа в этом CStringT
объекте, соответствующий запрошенной подстроке или символам; -1, если подстрока или символ не найдена.
Замечания
Функция перегружается для приема как отдельных символов (аналогично функции strchr
времени выполнения), так и строк (аналогично strstr
).
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s(_T("abcdef"));
ASSERT(s.Find(_T('c')) == 2);
ASSERT(s.Find(_T("de")) == 3);
CAtlString str(_T("The waves are still"));
int n = str.Find(_T('e'), 5);
ASSERT(n == 7);
CStringT::FindOneOf
Выполняет поиск в этой строке первого символа, соответствующего любому символу, содержаемому в pszCharSet
.
int FindOneOf(PCXSTR pszCharSet) const throw();
Параметры
pszCharSet
Строка, содержащая символы для сопоставления.
Возвращаемое значение
Отсчитываемый от нуля индекс первого символа в этой строке, который также находится в pszCharSet
; -1, если совпадения нет.
Замечания
Находит первое вхождение любого из символов.pszCharSet
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s(_T("abcdef"));
ASSERT(s.FindOneOf(_T("xd")) == 3); // 'd' is first match
CStringT::Format
Записывает отформатированные данные CStringT
таким же образом, как sprintf_s
форматирует данные в массив символов в стиле C.
void __cdecl Format(UINT nFormatID, [, argument]...);
void __cdecl Format(PCXSTR pszFormat, [, argument] ...);
Параметры
nFormatID
Идентификатор ресурса строки, содержащий строку элемента управления форматом.
pszFormat
Строка элемента управления форматом.
argument
Необязательные аргументы.
Замечания
Эта функция форматирует и сохраняет ряд символов и значений в объекте CStringT
. Каждый необязательный аргумент (если таковой) преобразуется и выводится в соответствии с соответствующей спецификацией формата в pszFormat
строковом ресурсе, определяемом пользователем nFormatID
.
Вызов завершится ошибкой, если сам объект строки предлагается в качестве параметра Format
. Например, следующий код приведет к непредсказуемым результатам:
CAtlString str = _T("Some Data");
str.Format(_T("%s%d"), str, 123);
// Attention: str is also used in the parameter list.
Дополнительные сведения см. в разделе "Синтаксис спецификации формата" printf
и wprintf
"Функции".
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString str;
str.Format(_T("Floating point: %.2f\n"), 12345.12345);
_tprintf_s(_T("%s"), (LPCTSTR) str);
str.Format(_T("Left-justified integer: %.6d\n"), 35);
_tprintf_s(_T("%s"), (LPCTSTR) str);
CStringT::FormatMessage
Форматирует строку сообщения.
void __cdecl FormatMessage(UINT nFormatID, [, argument]...);
void __cdecl FormatMessage(PCXSTR pszFormat, [, argument]...);
Параметры
nFormatID
Идентификатор ресурса строки, содержащий неформатируемый текст сообщения.
pszFormat
Указывает на строку элемента управления форматированием. Он будет сканирован для вставок и отформатирован соответствующим образом. Строка формата похожа на строки форматирования функции printf
времени выполнения, за исключением того, что он позволяет вставлять параметры в произвольном порядке.
argument
Необязательные аргументы.
Замечания
Для функции требуется определение сообщения в качестве входных данных. Определение сообщения определяется pszFormat
или из строкового ресурса, определяемого nFormatID
. Функция копирует форматированный текст сообщения в CStringT
объект, обрабатывая все внедренные последовательности вставок при запросе.
Примечание.
FormatMessage
пытается выделить системную память для новой отформатируемой строки. Если эта попытка завершается ошибкой, исключение памяти создается автоматически.
Каждая вставка должна иметь соответствующий параметр после pszFormat
или nFormatID
параметра. В тексте сообщения поддерживается несколько escape-последовательностей для динамического форматирования сообщения. Дополнительные сведения см. в функции Windows FormatMessage
в пакете SDK для Windows.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString str;
int nAsked = 5;
int nAgree = 4;
str.FormatMessage(_T("%1!d! of %2!d! writers agree: Soccer is %3%!"),
nAgree, nAsked, _T("Best"));
ASSERT(str == _T("4 of 5 writers agree: Soccer is Best!"));
CStringT::FormatMessageV
Форматирует строку сообщения с помощью списка аргументов переменной.
void FormatMessageV(PCXSTR pszFormat, va_list* pArgList);
Параметры
pszFormat
Указывает на строку элемента управления форматированием. Он будет сканирован для вставок и отформатирован соответствующим образом. Строка формата похожа на строки форматирования функции printf
времени выполнения, за исключением того, что он позволяет вставлять параметры в произвольном порядке.
pArgList
Указатель на список аргументов.
Замечания
Для функции требуется pszFormat
определение сообщения в качестве входных данных. Функция копирует форматированный текст сообщения и список переменных аргументов в CStringT
объект, обрабатывая все внедренные последовательности вставки при запросе.
Примечание.
FormatMessageV
вызывает CStringT::FormatMessage
, который пытается выделить системную память для новой отформатируемой строки. Если эта попытка завершается ошибкой, исключение памяти создается автоматически.
Дополнительные сведения см. в функции Windows FormatMessage
в пакете SDK для Windows.
CStringT::FormatV
Форматирует строку сообщения с помощью списка аргументов переменной.
void FormatV(PCXSTR pszFormat, va_list args);
Параметры
pszFormat
Указывает на строку элемента управления форматированием. Он будет сканирован для вставок и отформатирован соответствующим образом. Строка формата похожа на строки форматирования функции printf
времени выполнения, за исключением того, что он позволяет вставлять параметры в произвольном порядке.
args
Указатель на список аргументов.
Замечания
Записывает форматированную строку и список аргументов в строку таким же образом, как vsprintf_s
форматирует данные в массив символов CStringT
в стиле C.
Пример
void WriteString(LPCTSTR pstrFormat, ...)
{
CString str;
// format and write the data you were given
va_list args;
va_start(args, pstrFormat);
str.FormatV(pstrFormat, args);
va_end(args);
_tprintf_s(str);
return;
}
// Call the above WriteString function.
WriteString(_T("%d error(s) found in %d line(s)"), 10, 1351);
CStringT::GetEnvironmentVariable
Задает строку значению указанной переменной среды.
BOOL GetEnvironmentVariable(PCXSTR pszVar);
Параметры
pszVar
Указатель на строку, завершающую значение NULL, которая указывает переменную среды.
Возвращаемое значение
Имеет ненулевое значение в случае успешного выполнения, иначе — 0.
Замечания
Извлекает значение указанной переменной из блока среды вызывающего процесса. Значение находится в виде строки символов, завершаемой значением NULL.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString EnvStr;
EnvStr.GetEnvironmentVariable(_T("TEMP"));
_tprintf_s(_T("Current value of TEMP variable: %s\n"), EnvStr);
CStringT::Insert
Вставляет один символ или подстроку по заданному индексу в строке.
int Insert(int iIndex, PCXSTR psz);
int Insert(int iIndex, XCHAR ch);
Параметры
iIndex
Индекс символа, перед которым будет выполняться вставка.
psz
Указатель на вставленную подстроку.
ch
Символ, который нужно вставить.
Возвращаемое значение
Длина измененной строки.
Замечания
Параметр iIndex
определяет первый символ, который будет перемещен, чтобы освободить место для символа или подстроки. Если nIndex
значение равно нулю, вставка будет выполняться до всей строки. Если nIndex выше длины строки, функция сцепит текущую строку и новый материал, предоставленный либо ch
psz
.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString str(_T("SoccerBest"));
int n = str.Insert(6, _T("is "));
ASSERT(n == str.GetLength());
_tprintf_s(_T("1: %s\n"), (LPCTSTR) str);
n = str.Insert(6, _T(' '));
ASSERT(n == str.GetLength());
_tprintf_s(_T("2: %s\n"), (LPCTSTR) str);
n = str.Insert(55, _T('!'));
ASSERT(n == str.GetLength());
_tprintf_s(_T("3: %s\n"), (LPCTSTR) str);
CStringT::Left
Извлекает наиболее nCount
левые символы из этого CStringT
объекта и возвращает копию извлеченной подстроки.
CStringT Left(int nCount) const;
Параметры
nCount
Число символов, извлекаемых из данного объекта CStringT
.
Возвращаемое значение
Объект CStringT
, содержащий копию указанного диапазона символов. Возвращенный объект CStringT
может быть пустым.
Замечания
Если nCount
превышает длину строки, извлекается вся строка. Функция Left
аналогична функции Left
в языке Basic.
Для многобайтовых наборов символов (MBCS) nCount
обрабатывает каждую 8-разрядную последовательность как символ, чтобы nCount
возвращать количество многобайтовых символов, умноженных на два.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s(_T("abcdef"));
ASSERT(s.Left(2) == _T("ab"));
CStringT::LoadString
Считывает строковый ресурс Windows, определяемый nID, в существующий CStringT
объект.
BOOL LoadString(HINSTANCE hInstance, UINT nID, WORD wLanguageID);
BOOL LoadString(HINSTANCE hInstance, UINT nID);
BOOL LoadString(UINT nID);
Параметры
hInstance
Дескриптор экземпляра модуля.
nID
Идентификатор ресурса строки Windows.
wLanguageID
Язык строкового ресурса.
Возвращаемое значение
Ненулевое значение, если загрузка ресурсов выполнена успешно; в противном случае — 0.
Замечания
Загружает строковый ресурс (nID
) из указанного модуля (hInstance
) с помощью указанного языка (wLanguage
).
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s;
s.LoadString(IDS_APP_TITLE);
CStringT::MakeLower
Преобразует объект в CStringT
строчную строку.
CStringT& MakeLower();
Возвращаемое значение
Результирующая строчная строка.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s(_T("ABC"));
ASSERT(s.MakeLower() == _T("abc"));
CStringT::MakeReverse
Изменяет порядок символов в объекте CStringT
.
CStringT& MakeReverse();
Возвращаемое значение
Результирующая обратная строка.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s(_T("abc"));
ASSERT(s.MakeReverse() == _T("cba"));
CStringT::MakeUpper
Преобразует объект в CStringT
строку верхнего регистра.
CStringT& MakeUpper();
Возвращаемое значение
Результирующая строка верхнего регистра.
Замечания
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s(_T("abc"));
ASSERT(s.MakeUpper() == _T("ABC"));
CStringT::Mid
Извлекает подстроку символов длины nCount
из этого CStringT
объекта, начиная с позиции iFirst
(от нуля).
CStringT Mid(int iFirst, int nCount) const;
CStringT Mid(int iFirst) const;
Параметры
iFirst
Отсчитываемый от нуля индекс первого символа в этом CStringT
объекте, который должен быть включен в извлеченную подстроку.
nCount
Число символов, извлекаемых из данного объекта CStringT
. Если этот параметр не указан, извлекается остальная часть строки.
Возвращаемое значение
Объект CStringT
, содержащий копию указанного диапазона символов. Возвращенный объект CStringT
может быть пустым.
Замечания
Функция возвращает копию извлеченной подстроки. Mid
похож на функцию Basic Mid (за исключением того, что индексы в Basic основаны на одном из них).
Для многобайтовых наборов символов (MBCS) nCount
относится к каждому 8-разрядному символу. То есть байт свинца и байта в одном многобайтовом символе считаются двумя символами.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s(_T("abcdef"));
ASSERT(s.Mid(2, 3) == _T("cde"));
CStringT::OemToAnsi
Преобразует все символы в этом CStringT
объекте из набора символов OEM в набор символов ANSI.
void OemToAnsi();
Замечания
Эта функция недоступна, если _UNICODE
определена.
Пример
Пример см. в примере CStringT::AnsiToOem
.
CStringT::operator =
Назначает новое значение строке.
CStringT& operator=(const CStringT& strSrc);
template<bool bMFCDLL>
CStringT& operator=(const CSimpleStringT<BaseType, bMFCDLL>& str);
CStringT& operator=(PCXSTR pszSrc);
CStringT& operator=(PCYSTR pszSrc);
CStringT& operator=(const unsigned char* pszSrc);
CStringT& operator=(XCHAR ch);
CStringT& operator=(YCHAR ch);
CStringT& operator=(const VARIANT& var);
Параметры
strSrc
Значение, CStringT
назначаемое этой строке.
str
Ссылка на объект CThisSimpleString
.
bMFCDLL
Логическое значение, указывающее, является ли проект библиотекой DLL MFC или нет.
BaseType
Базовый тип строки.
var
Объект variant для назначения этой строке.
ch
Символ ANSI или Юникод для назначения строке.
pszSrc
Указатель на назначенную исходную строку.
Замечания
Оператор присваивания принимает другой CStringT
объект, указатель символа или один символ. Исключения памяти могут возникать всякий раз, когда этот оператор используется, так как новое хранилище может быть выделено.
Дополнительные сведения см. в разделе CStringT::CStringT
"ПримечанияCThisSimpleString
".
Примечание.
Хотя можно создать CStringT
экземпляры, содержащие внедренные символы NULL, рекомендуется использовать его. Вызов методов и операторов в CStringT
объектах, содержащих внедренные символы NULL, может создавать непреднамеренные результаты.
CStringT::operator +
Объединяет две строки или символ и строку.
friend CStringT operator+(const CStringT& str1, const CStringT& str2);
friend CStringT operator+(const CStringT& str1, PCXSTR psz2);
friend CStringT operator+(PCXSTR psz1, const CStringT& str2,);
friend CStringT operator+(char ch1, const CStringT& str2,);
friend CStringT operator+(const CStringT& str1, char ch2);
friend CStringT operator+(const CStringT& str1, wchar_t ch2);
friend CStringT operator+(wchar_t ch1, const CStringT& str2,);
Параметры
ch1
Символ ANSI или Юникод для объединения со строкой.
ch2
Символ ANSI или Юникод для объединения со строкой.
str1
Значение для CStringT
объединения со строкой или символом.
str2
Значение для CStringT
объединения со строкой или символом.
psz1
Указатель на строку, завершаемую значением NULL, для объединения со строкой или символом.
psz2
Указатель на строку для объединения со строкой или символом.
Замечания
Существует семь форм перегрузки CStringT::operator+
функции. Первая версия объединяет два существующих CStringT
объекта. Следующие два объединения CStringT
объекта и строки, завершаемой значением NULL. Следующие два сцепления CStringT
объекта и символа ANSI. Последние два сцепляют CStringT
объект и символ Юникода.
Примечание.
Хотя можно создать CStringT
экземпляры, содержащие внедренные символы NULL, рекомендуется использовать его. Вызов методов и операторов в CStringT
объектах, содержащих внедренные символы NULL, может создавать непреднамеренные результаты.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s1(_T("dog ")), s2(_T(" awake")), s3; // Empty CAtlString objects
s1= _T("The ") + s1;
s3= s1 + _T('i');
s3= s3 + _T('s');
s3= s3 + s2;
ASSERT(s3 == _T("The dog is awake"));
CStringT::operator +=
Объединяет символы в конец строки.
CStringT& operator+=(const CThisSimpleString& str);
template<bool bMFCDLL>
CStringT& operator+=(const const CSimpleStringT<BaseType, bMFCDLL>& str);
template<int t_nSize>
CStringT& operator+=(const CStaticString<XCHAR, t_nSize>& strSrc);
CStringT& operator+=(PCXSTR pszSrc);
CStringT& operator+=(PCYSTR pszSrc);
CStringT& operator+=(char ch);
CStringT& operator+=(unsigned char ch);
CStringT& operator+=(wchar_t ch);
CStringT& operator+=(const VARIANT& var);
Параметры
str
Ссылка на объект CThisSimpleString
.
bMFCDLL
Логическое значение, указывающее, является ли проект библиотекой DLL MFC или нет.
BaseType
Базовый тип строки.
var
Объект variant для объединения с этой строкой.
ch
Символ ANSI или Юникод для объединения со строкой.
pszSrc
Указатель на исходную строку, сцепленную.
strSrc
Значение для CStringT
объединения с этой строкой.
Замечания
Оператор принимает другой CStringT
объект, указатель символа или один символ. Исключения памяти могут возникать всякий раз, когда вы используете этот оператор объединения, так как новое хранилище может быть выделено для символов, добавленных в этот CStringT
объект.
Дополнительные сведения см. в разделе CStringT::CStringT
"ПримечанияCThisSimpleString
".
Примечание.
Хотя можно создать CStringT
экземпляры, содержащие внедренные символы NULL, рекомендуется использовать его. Вызов методов и операторов в CStringT
объектах, содержащих внедренные символы NULL, может создавать непреднамеренные результаты.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s(_T("abc"));
ASSERT((s += _T("def")) == _T("abcdef"));
CStringT::operator ==
Определяет, равны ли две строки логически.
friend bool operator==(const CStringT& str1, const CStringT& str2) throw();
friend bool operator==(const CStringT& str1, PCXSTR psz2) throw();
friend bool operator==(const CStringT& str1, PCYSTR psz2) throw();
friend bool operator==(const CStringT& str1, XCHAR ch2) throw();
friend bool operator==(PCXSTR psz1, const CStringT& str2) throw();
friend bool operator==(PCYSTR psz1, const CStringT& str2,) throw();
friend bool operator==(XCHAR ch1, const CStringT& str2,) throw();
Параметры
ch1
Символ ANSI или Юникод для сравнения.
ch2
Символ ANSI или Юникод для сравнения.
str1
А CStringT
для сравнения.
str2
А CStringT
для сравнения.
psz1
Указатель на строку, завершаемую значением NULL, для сравнения.
psz2
Указатель на строку, завершаемую значением NULL, для сравнения.
Замечания
Проверяет, равен ли строка или символ в левой части строке или символу справа, а также возвращается TRUE
или FALSE
соответственно.
Пример
// typedef CStringT< TCHAR, StrTraitATL< TCHAR > > CAtlString;
CAtlString s1(_T("dog")), s2(_T("f")), s3(_T("dog"));
ASSERT(s1 == _T("dog"));
ASSERT(s2 == _T('f'));
ASSERT(s1 == s3);
CStringT::operator !=
Определяет, являются ли две строки логически не равными.
friend bool operator!=(const CStringT& str1, const CStringT& str2) throw();
friend bool operator!=(const CStringT& str1, PCXSTR psz2) throw();
friend bool operator!=(const CStringT& str1, PCYSTR psz2) throw();
friend bool operator!=(const CStringT& str1, XCHAR ch2) throw();
friend bool operator!=(PCXSTR psz1, const CStringT& str2) throw();
friend bool operator!=(PCYSTR psz1, const CStringT& str2,) throw();
friend bool operator!=(XCHAR ch1, const CStringT& str2,) throw();
Параметры
ch1
Символ ANSI или Юникод для объединения со строкой.
ch2
Символ ANSI или Юникод для объединения со строкой.
str1
А CStringT
для сравнения.
str2
А CStringT
для сравнения.
psz1
Указатель на строку, завершаемую значением NULL, для сравнения.
psz2
Указатель на строку, завершаемую значением NULL, для сравнения.
Замечания
Проверяет, не совпадает ли строка или символ слева со строкой или символом справа.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s1(_T("cat")), s2(_T("f")), s3(_T("horse"));
ASSERT(s1 != _T("dog"));
ASSERT(s2 != _T('t'));
ASSERT(s1 != s2);
CStringT::operator <
Определяет, меньше ли строка в левой части оператора, чем строка справа.
friend bool operator<(const CStringT& str1, const CStringT& str2) throw();
friend bool operator<(const CStringT& str1, PCXSTR psz2) throw();
friend bool operator<(PCXSTR psz1, const CStringT& str2) throw();
Параметры
str1
А CStringT
для сравнения.
str2
А CStringT
для сравнения.
psz1
Указатель на строку, завершаемую значением NULL, для сравнения.
psz2
Указатель на строку, завершаемую значением NULL, для сравнения.
Замечания
Лексографическое сравнение между строками, символами по символам, пока:
Находит два соответствующих символа, которые считаются неравными, а результат их сравнения считается результатом сравнения строк.
Неравенство не обнаруживается, однако одна строка содержит больше символов, чем другая, и более короткая строка считается меньше, чем более длинная.
Неравенство не обнаруживается, и считается, что строки содержат одинаковое количество символов, поэтому сроки равны.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s1(_T("cat")), s2(_T("cats")), s3(_T("dogs"));
ASSERT(s1 < _T("dog"));
ASSERT(s1 < _T("cats"));
ASSERT(s2 < _T("cats and dogs"));
ASSERT(s2 < s3);
CStringT::operator >
Определяет, больше ли строка в левой части оператора, чем строка справа.
friend bool operator>(const CStringT& str1, const CStringT& str2) throw();
friend bool operator>(const CStringT& str1, PCXSTR psz2) throw();
friend bool operator>(PCXSTR psz1, const CStringT& str2) throw();
Параметры
str1
А CStringT
для сравнения.
str2
А CStringT
для сравнения.
psz1
Указатель на строку, завершаемую значением NULL, для сравнения.
psz2
Указатель на строку, завершаемую значением NULL, для сравнения.
Замечания
Лексографическое сравнение между строками, символами по символам, пока:
Находит два соответствующих символа, которые считаются неравными, а результат их сравнения считается результатом сравнения строк.
Неравенство не обнаруживается, однако одна строка содержит больше символов, чем другая, и более короткая строка считается меньше, чем более длинная.
Неравенство не обнаруживается, и считается, что строки содержат одинаковое количество символов, и поэтому сроки равны.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s1(_T("cat")), s2(_T("cats")), s3(_T("dogs"));
ASSERT(_T("dog") > s1);
ASSERT(_T("cats") > s1);
ASSERT(_T("cats and dogs") > s2);
ASSERT(s3 > s2);
CStringT::operator <=
Определяет, является ли строка в левой части оператора меньше или равно строке справа.
friend bool operator<=(const CStringT& str1, const CStringT& str2) throw();
friend bool operator<=(const CStringT& str1, PCXSTR psz2) throw();
friend bool operator<=(PCXSTR psz1, const CStringT& str2) throw();
Параметры
str1
А CStringT
для сравнения.
str2
А CStringT
для сравнения.
psz1
Указатель на строку, завершаемую значением NULL, для сравнения.
psz2
Указатель на строку, завершаемую значением NULL, для сравнения.
Замечания
Лексографическое сравнение между строками, символами по символам, пока:
Находит два соответствующих символа, которые считаются неравными, а результат их сравнения считается результатом сравнения строк.
Неравенство не обнаруживается, однако одна строка содержит больше символов, чем другая, и более короткая строка считается меньше, чем более длинная.
Неравенство не обнаруживается, и считается, что строки содержат одинаковое количество символов, и поэтому сроки равны.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s1(_T("cat")), s2(_T("cats")), s3(_T("dogs"));
ASSERT(s1 <= _T("dog"));
ASSERT(s1 <= _T("cat"));
ASSERT(s3 <= _T("dogs and cats"));
ASSERT(s2 <= s3);
CStringT::operator >=
Определяет, больше ли строка в левой части оператора или равна строке справа.
friend bool operator>=(const CStringT& str1, const CStringT& str2) throw();
friend bool operator>=(const CStringT& str1, PCXSTR psz2) throw();
friend bool operator>=(PCXSTR psz1, const CStringT& str2) throw();
Параметры
str1
А CStringT
для сравнения.
str2
А CStringT
для сравнения.
psz1
Указатель на строку для сравнения.
psz2
Указатель на строку для сравнения.
Замечания
Лексографическое сравнение между строками, символами по символам, пока:
Находит два соответствующих символа, которые считаются неравными, а результат их сравнения считается результатом сравнения строк.
Неравенство не обнаруживается, однако одна строка содержит больше символов, чем другая, и более короткая строка считается меньше, чем более длинная.
Неравенство не обнаруживается, и считается, что строки содержат одинаковое количество символов, и поэтому сроки равны.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s1(_T("cat")), s2(_T("cats")), s3(_T("dogs"));
ASSERT(_T("dog") >= s1);
ASSERT(_T("cats and dogs") >= s2);
ASSERT(s3 >= s2);
CStringT::Remove
Удаляет все экземпляры указанного символа из строки.
int Remove(XCHAR chRemove);
Параметры
chRemove
Символ, который нужно удалить из строки.
Возвращаемое значение
Количество символов, удаленных из строки. Ноль, если строка не изменяется.
Замечания
Сравнения для символа чувствительны к регистру.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString str(_T("This is a test."));
int n = str.Remove(_T('t'));
ASSERT(n == 2);
ASSERT(str == _T("This is a es."));
CStringT::Replace
Существует две версии Replace
. Первая версия заменяет одну или несколько копий подстроки с помощью другой подстроки. Обе подстроки завершаются значением NULL. Вторая версия заменяет одну или несколько копий символа с помощью другого символа. Обе версии работают с символьными данными, хранящимися в CStringT
.
int Replace(PCXSTR pszOld, PCXSTR pszNew);
int Replace(XCHAR chOld, XCHAR chNew);
Параметры
pszOld
Указатель на строку, завершаемую значением NULL, которую необходимо заменить pszNew
.
pszNew
Указатель на строку, завершающуюся значением NULL, которая заменяет pszOld
.
chOld
Символ, который chNew
необходимо заменить.
chNew
Символ, заменяющий chOld
.
Возвращаемое значение
Возвращает количество замененных экземпляров символа или подстроки или ноль, если строка не изменена.
Замечания
Replace
может изменить длину строки, так как pszNew
pszOld
и не обязательно иметь одинаковую длину, а несколько копий старой подстроки можно изменить на новую. Функция соответствует регистру.
Примерами CStringT
экземпляров являются CString
, CStringA
и CStringW
.
Для CStringA
этого Replace
работает с символами ANSI или многобайтовых символов (MBCS). Для CStringW
этого Replace
работает с широкими символами.
Для CString
этого тип данных символа выбирается во время компиляции в зависимости от того, определены ли константы в следующей таблице.
Определяемая константа | Тип данных символов |
---|---|
_UNICODE |
Расширенные символы |
_MBCS |
Многобайтовые символы |
Нет | Однобайтовые символы |
Оба | Undefined |
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString strBang(_T("Everybody likes epee fencing"));
int n = strBang.Replace(_T("epee"), _T("foil"));
ASSERT(n == 1);
CStringT::ReverseFind
Выполняет поиск этого CStringT
объекта для последнего совпадения символа.
int ReverseFind(XCHAR ch) const throw();
Параметры
ch
Символ для поиска.
Возвращаемое значение
Отсчитываемый от нуля индекс последнего символа в этом CStringT
объекте, который соответствует запрошенным символам или -1, если символ не найден.
Замечания
Функция похожа на функцию strrchr
времени выполнения.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s(_T("abcabc"));
ASSERT(s.ReverseFind(_T('b')) == 4);
CStringT::Right
Извлекает последние (то есть правые) nCount
символы из этого CStringT
объекта и возвращает копию извлеченной подстроки.
CStringT Right(int nCount) const;
Параметры
nCount
Число символов, извлекаемых из данного объекта CStringT
.
Возвращаемое значение
Объект CStringT
, содержащий копию указанного диапазона символов. Возвращаемый CStringT
объект может быть пустым.
Замечания
Если nCount
превышает длину строки, извлекается вся строка. Right
аналогичен базовой функции (за исключением того, что индексы в Basic Right
основаны на нулях).
Для многобайтовых наборов символов (MBCS
) nCount
относится к каждому 8-разрядному символу; то есть байт свинца и следа в одном многобайтовом символе считаются двумя символами.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString s(_T("abcdef"));
ASSERT(s.Right(2) == _T("ef"));
CStringT::SetSysString
Перераспределяет указатель pbstr
на и копирует BSTR
содержимое CStringT
объекта в него, включая NULL
символ.
BSTR SetSysString(BSTR* pbstr) const;
Параметры
pbstr
Указатель на символьную строку.
Возвращаемое значение
Новая строка.
Замечания
В зависимости от содержимого CStringT
объекта значение BSTR
, на которое pbstr
ссылается ссылка, может измениться. Функция создает CMemoryException
исключение, если недостаточно памяти.
Обычно эта функция используется для изменения значения строк, передаваемых по ссылке для автоматизации.
Пример
BSTR bstr = ::SysAllocString(L"Golf is fun!");
// create a CAtlString and change the OLE
// string to the contents of the BSTR
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString str(_T("Soccer is best!"));
BSTR bstr2 = str.SetSysString(&bstr);
// Now, both bstr and bstr2 reference a single instance of
// the "Soccer" string. The "Golf" string has been freed.
ASSERT(bstr2 == bstr);
CStringT::SpanExcluding
Извлекает символы из строки, начиная с первого символа, которые не указаны в наборе символов, определенных pszCharSet
.
CStringT SpanExcluding(PCXSTR pszCharSet) const;
Параметры
pszCharSet
Строка, интерпретируемая как набор символов.
Возвращаемое значение
Подстрока, содержащая символы в строке, которая не pszCharSet
находится, начиная с первого символа в строке и заканчивая первым символом, найденным в pszCharSet
строке (то есть начиная с первого символа в строке и вплоть до исключения первого символа в найденной pszCharSet
строке). Она возвращает всю строку, если в pszCharSet
строке нет символа.
Замечания
SpanExcluding
извлекает и возвращает все символы, предшествующие первому вхождения символа pszCharSet
(другими словами, символ из pszCharSet
и всех символов, следующих за ним в строке, не возвращаются). Если символ не pszCharSet
найден в строке, возвращает SpanExcluding
всю строку.
Пример
// The string can be delimited by a semicolon(;),
// a comma(,), a period(.), a dash(-),
// or an apostrophe(').
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString src(_T("abcdef"));
_tprintf_s(_T("%s"),src.SpanExcluding(_T(";,.-'")));
CStringT::SpanIncluding
Извлекает символы из строки, начиная с первого символа, которые находятся в наборе символов, определяемых pszCharSet
.
CStringT SpanIncluding(PCXSTR pszCharSet) const;
Параметры
pszCharSet
Строка, интерпретируемая как набор символов.
Возвращаемое значение
Подстрока, содержащая символы в строке, начиная с первого символа в строке pszCharSet
и заканчивая, когда символ найден в строке, которая не находится.pszCharSet
SpanIncluding
возвращает пустую подстроку, если первый символ строки не указан в указанном наборе.
Замечания
Если первый символ строки не указан в наборе символов, возвращает SpanIncluding
пустую строку. В противном случае возвращается последовательность последовательных символов, которые находятся в наборе.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString str(_T("cabbage"));
CAtlString res = str.SpanIncluding(_T("abc"));
ASSERT(res == _T("cabba"));
res = str.SpanIncluding(_T("xyz"));
ASSERT(res.IsEmpty());
CStringT::Tokenize
Находит следующий маркер в целевой строке
CStringT Tokenize(PCXSTR pszTokens, int& iStart) const;
Параметры
pszTokens
Строка, содержащая разделители маркеров. Порядок этих разделителей не важен.
iStart
Отсчитываемый от нуля индекс для начала поиска.
Возвращаемое значение
CStringT
Объект, содержащий текущее значение маркера.
Замечания
Функция Tokenize
находит следующий маркер в целевой строке. Набор символов в pszTokens
указании возможных разделителей маркера, которые нужно найти. При каждом вызове Tokenize
функции начинается iStart
с , пропускает ведущие разделители и возвращает CStringT
объект, содержащий текущий маркер, который является строкой символов до следующего символа разделителя. Значение iStart
обновляется, чтобы быть позицией после конечного символа разделителя или -1, если достигнут конец строки. Дополнительные маркеры можно разбить из остальной части целевой строки рядом вызовов Tokenize
, используя iStart
для отслеживания того, где в строке будет считываться следующий маркер. Если больше маркеров нет, функция вернет пустую строку и iStart
будет иметь значение -1.
В отличие от функций маркеризации CRT, таких как _strtok_s_l
strtok_s
, wcstok_s
, _wcstok_s_l
, _mbstok_s
, _mbstok_s_l
Tokenize
не изменяет целевую строку.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString str(_T("%First Second#Third"));
CAtlString resToken;
int curPos = 0;
resToken= str.Tokenize(_T("% #"),curPos);
while (resToken != _T(""))
{
_tprintf_s(_T("Resulting token: %s\n"), resToken);
resToken = str.Tokenize(_T("% #"), curPos);
};
Выходные данные из этого примера приведены следующим образом:
Resulting Token: First
Resulting Token: Second
Resulting Token: Third
CStringT::Trim
Обрезает начальные и конечные символы из строки.
CStringT& Trim(XCHAR chTarget);
CStringT& Trim(PCXSTR pszTargets);
CStringT& Trim();
Параметры
chTarget
Целевой символ, который нужно обрезать.
pszTargets
Указатель на строку, содержащую целевые символы, которые необходимо обрезать. Все начальные и конечные вхождения символов будут pszTargets
обрезаны из CStringT
объекта.
Возвращаемое значение
Возвращает обрезаемую строку.
Замечания
Удаляет все начальные и конечные вхождения одного из следующих вариантов:
Символ, заданный
chTarget
.Все символы, найденные в строке, указанной в параметре
pszTargets
.Пробелы.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString str;
str = _T("******Soccer is best!?!?!?!?!");
_tprintf_s(_T("Before: \"%s\"\n"), (LPCTSTR)str);
_tprintf_s(_T("After : \"%s\"\n"), (LPCTSTR)str.Trim(_T("?!*")));
// Output:
// --------------------------
// Before: ******Soccer is best!?!?!?!?!
// After: Soccer is best
Выходные данные из этого примера приведены следующим образом:
Before: "******Soccer is best, but liquor is quicker!!!!!"
After : "Soccer is best, but liquor is quicker"
CStringT::TrimLeft
Обрезает ведущие символы из строки.
CStringT& TrimLeft(XCHAR chTarget);
CStringT& TrimLeft(PCXSTR pszTargets);
CStringT& TrimLeft();
Параметры
chTarget
Целевой символ, который нужно обрезать.
pszTargets
Указатель на строку, содержащую целевые символы, которые необходимо обрезать. Все начальные вхождения символов будут pszTargets
обрезаны из CStringT
объекта.
Возвращаемое значение
Результирующая обрезанная строка.
Замечания
Удаляет все начальные и конечные вхождения одного из следующих вариантов:
Символ, заданный
chTarget
.Все символы, найденные в строке, указанной в параметре
pszTargets
.Пробелы.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString str;
str = _T("\t\t ****Soccer is best!");
_tprintf_s(_T("Before: \"%s\"\n"), (LPCTSTR)str);
_tprintf_s(_T("After: \"%s\"\n"), (LPCTSTR)str.TrimLeft(_T("\t *")));
// Output:
// --------------------------
// Before: ****Soccer is best!
// After: Soccer is best!
CStringT::TrimRight
Обрезает конечные символы из строки.
CStringT& TrimRight(XCHAR chTarget);
CStringT& TrimRight(PCXSTR pszTargets);
CStringT& TrimRight();
Параметры
chTarget
Целевой символ, который нужно обрезать.
pszTargets
Указатель на строку, содержащую целевые символы, которые необходимо обрезать. Все конечные вхождения символов будут pszTargets
обрезаны из CStringT
объекта.
Возвращаемое значение
CStringT
Возвращает объект, содержащий обрезку строки.
Замечания
Удаляет конечные вхождения одного из следующих вариантов:
Символ, заданный
chTarget
.Все символы, найденные в строке, указанной в параметре
pszTargets
.Пробелы.
Версия CStringT& TrimRight(XCHAR chTarget)
принимает один параметр символа и удаляет все копии этого символа из конца строковых CStringT
данных. Он начинается с конца строки и работает на переднем крае. Он останавливается при обнаружении другого символа или при CStringT
истечении срока действия символьных данных.
Версия CStringT& TrimRight(PCXSTR pszTargets)
принимает строку, завершающуюся значением NULL, которая содержит все различные символы для поиска. Он удаляет все копии этих символов в объекте CStringT
. Он начинается в конце строки и работает на переднем крае. Он останавливается при обнаружении символа, который не находится в целевой строке, или при CStringT
истечении срока действия символьных данных. Он не пытается сопоставить всю целевую строку со подстрокой в конце CStringT
.
Версия CStringT& TrimRight()
не требует параметров. Он обрезает все конечные символы пробелов от конца CStringT
строки. Пробелы могут быть разрывами строк, пробелами или вкладками.
Пример
// typedef CStringT<TCHAR, StrTraitATL<TCHAR, ChTraitsCRT<TCHAR>>> CAtlString;
CAtlString str;
str = _T("Soccer is best!?!?!?!?!");
_tprintf_s(_T("Before: \"%s\"\n"), (LPCTSTR)str);
_tprintf_s(_T("After : \"%s\"\n"), (LPCTSTR)str.TrimRight(_T("?!")));
// Output:
// --------------------------
// Before: Soccer is best!?!?!?!?!
// After: Soccer is best
См. также
Диаграмма иерархии
Общие классы ATL/MFC
CSimpleStringT
Класс