CString – základní operace
Toto téma vysvětluje následující základní operace CString :
Class CString
je založená na šabloně třídy CStringT – třída. CString
je z typedef
CStringT
. Přesněji řečeno, CString
je typedef
explicitní specializace CStringT
, což je běžný způsob použití šablony třídy k definování třídy. Podobně definované třídy jsou CStringA
a CStringW
.
CString
, CStringA
a CStringW
jsou definovány v atlstr.h. CStringT
je definován v souboru cstringt.h.
CString
a CStringA
CStringW
každá z nich získá sadu metod a operátorů definovaných CStringT
pro použití s řetězcovými daty, která podporují. Některé z metod duplikují a v některých případech překračují řetězcové služby knihoven runtime jazyka C.
Poznámka: CString
je nativní třída. Pro třídu řetězců, která se používá v projektu spravovaném V++/CLI, použijte System.String
.
Vytváření objektů CString ze standardních řetězců literálů jazyka C
Literály CString
ve stylu jazyka C můžete přiřadit stejně jako jeden CString
objekt k druhému.
Přiřaďte k objektu hodnotu literálového řetězce jazyka
CString
C.CString myString = _T("This is a test");
Přiřaďte hodnotu jednoho
CString
k jinémuCString
objektu.CString oldString = _T("This is a test"); CString newString = oldString;
Obsah objektu
CString
se zkopíruje, když je jedenCString
objekt přiřazen k jinému. Proto dva řetězce nesdílí odkaz na skutečné znaky, které tvoří řetězec. Další informace o použitíCString
objektů jako hodnot naleznete v tématu CString Smantics.Poznámka:
Chcete-li napsat aplikaci tak, aby ji bylo možné zkompilovat pro Kódování Unicode nebo pro anSI, řetězce literálů kódu pomocí _T makra. Další informace naleznete v tématu Podpora znakové sady Unicode a vícebajtové znakové sady (MBCS).
Přístup k jednotlivým znakům v jazyce CString
K jednotlivým znakům v objektu CString
můžete přistupovat pomocí GetAt
a SetAt
metod. Můžete také použít maticový prvek nebo dolní index, operátor ( [ ] ) místo GetAt
získání jednotlivých znaků. (Podobá se přístupu k prvkům pole podle indexu, stejně jako u standardních řetězců ve stylu jazyka C.) Hodnoty indexu pro CString
znaky jsou založené na nule.
Zřetězení dvou objektů CString
Ke zřetězení dvou CString
objektů použijte operátory zřetězení (+ nebo +=), jak je znázorněno níže.
CString s1 = _T("This "); // Cascading concatenation
s1 += _T("is a ");
CString s2 = _T("test");
CString message = s1 + _T("big ") + s2;
// Message contains "This is a big test".
Alespoň jeden argument operátorů zřetězení (+ nebo +=) musí být CString
objekt, ale pro druhý argument můžete použít řetězec konstantního znaku (například "big"
) nebo ( char
například x).
Porovnání objektů CString
Metoda Compare
a operátor == pro CString
jsou ekvivalentní. Compare
, operator== a CompareNoCase
jsou s podporou mbCS a Unicode; CompareNoCase
nerozlišují se také malá a velká písmena. Metoda Collate
CString
je citlivá na národní prostředí a je často pomalejší než Compare
. Použijte Collate
pouze tam, kde se musíte řídit pravidly řazení podle aktuálního národního prostředí.
V následující tabulce jsou uvedeny dostupné porovnávací funkce CString a jejich ekvivalentní funkce přenosných funkcí Unicode/MBCS v knihovně runtime jazyka C.
CString – funkce | MBCS | Funkce Unicode |
---|---|---|
Compare |
_mbscmp |
wcscmp |
CompareNoCase |
_mbsicmp |
_wcsicmp |
Collate |
_mbscoll |
wcscoll |
Šablona CStringT
třídy definuje relační operátory (<, <=, >=, >= , == a !=), které jsou k dispozici pro použití CString
. Pomocí těchto operátorů můžete porovnat dva CStrings
, jak je znázorněno v následujícím příkladu.
CString s1(_T("Tom"));
CString s2(_T("Jerry"));
ASSERT(s2 < s1);
Převod objektů CString
Informace o převodu objektů CString na jiné typy řetězců naleznete v tématu Postupy: Převod mezi různými typy řetězců.
Použití CString s wcoutem
Chcete-li použít CString s wcout
, musíte explicitně přetypovat objekt na objekt const wchar_t*
, jak je znázorněno v následujícím příkladu:
CString cs("meow");
wcout << (const wchar_t*) cs << endl;
Bez přetypování cs
se považuje za objekt a wcout
void*
vytiskne adresu objektu. Toto chování je způsobeno drobnými interakcemi mezi odpočtem argumentů šablony a řešením přetížení, které jsou samy o sobě správné a vyhovující standardu jazyka C++.
Viz také
Řetězce (ATL/MFC)
CStringT – třída
Specializace šablon
Postupy: Převody mezi různými typy řetězců