Класс 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.

Иерархия наследования

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_lwcscoll_strcoll_l_mbscoll_l.

CStringT::CollateNoCase

Сравнивает две строки с помощью функции _tcscollуниверсального текста.

int CollateNoCase(PCXSTR psz) const throw();

Параметры

psz
Другая строка, используемая для сравнения.

Возвращаемое значение

Ноль, если строки идентичны (игнорирующие регистр), 0, < если этот объект меньше psz (игнорирующий регистр), или > 0, если этот CStringTCStringT объект больше 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, _mbscmpwcscmp.

Если строка содержит внедренные значения 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, если этот CStringTCStringT объект больше 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 объект. Дополнительные сведения и CThisStringCThisSimpleStringсведения см. в разделе "Примечания".

varSrc
Объект variant, копируемый в этот CStringT объект.

BaseType
Тип символа класса строки. Может применяться один из перечисленных ниже типов.

char (для строк символов ANSI).

wchar_t (для строк символов Юникода).

TCHAR (для строк символов ANSI и Юникода).

bMFCDLL
Логическое значение, указывающее, является ли проект библиотекой DLL () MFC () илиTRUE нет (FALSE).

SystemString
Должно быть System::String, и проект должен быть скомпилирован с /clrпомощью .

pString
Дескриптор CStringT объекта.

Замечания

Так как конструкторы копируют входные данные в новое выделенное хранилище, исключения памяти могут привести к возникновению. Некоторые из этих конструкторов служат функциями преобразования. Это позволяет заменить, например, LPTSTRCStringT место ожидания объекта.

  • CStringT( ): LPCSTRlpsz создает Юникод CStringT из строки ANSI. Этот конструктор также можно использовать для загрузки строкового ресурса, как показано в приведенном ниже примере.

  • CStringT(LPCWSTRlpsz ): создает объект 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 выше длины строки, функция сцепит текущую строку и новый материал, предоставленный либо chpsz.

Пример

// 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.

Для многобайтовых наборов символов (МБ CS) 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 основаны на одном из них).

Для многобайтовых наборов символов (МБ CS) 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 может изменить длину строки, так как pszNewpszOld и не обязательно иметь одинаковую длину, а несколько копий старой подстроки можно изменить на новую. Функция соответствует регистру.

Примерами CStringT экземпляров являются CString, CStringAи CStringW.

Для CStringAэтого Replace используется символы ANSI или multibyte (МБ CS). Для 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);   

Извлекает последние (то есть правые) 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("World Cup '98"));

_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_lstrtok_s, wcstok_s, _wcstok_s_l, _mbstok_s, _mbstok_s_lTokenize не изменяет целевую строку.

Пример

// 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 Класса