char_traits Yapısı
char_traits yapısı bir karakterle ilişkili öznitelikleri açıklar.
Sözdizimi
template <class CharType>
struct char_traits;
Parametreler
CharType
Öğe veri türü.
Açıklamalar
Şablon yapısı, türü CharType
için çeşitli karakter özelliklerini açıklar. Sınıf şablonu basic_string ve basic_ios dahil olmak üzere çeşitli iostream sınıf şablonları türündeki CharType
öğeleri işlemek için bu bilgileri kullanır. Böyle bir öğe türü açık yapı veya imha gerektirmemelidir. Beklenen semantik ile varsayılan bir oluşturucu, kopya oluşturucu ve atama işleci sağlamalıdır. Bit düzeyinde kopya, atamayla aynı etkiye sahip olmalıdır. Yapı char_traits üye işlevlerinin hiçbiri özel durumlar oluşturamıyor.
Tür tanımları
Tür adı | Açıklama |
---|---|
char_type | Karakter türü. |
int_type | Tür veya dosya sonu (EOF) karakterini char_type temsil eden bir tamsayı türü. |
off_type | Bir akıştaki konumlar arasındaki uzaklıkları gösterebilen bir tamsayı türü. |
pos_type | Bir akıştaki konumları gösterebilen bir tamsayı türü. |
state_type | Bir akıştaki çok baytlı karakterler için içindeki dönüştürme durumunu temsil eden bir tür. |
Üye işlevleri
Üye işlevi | Açıklama |
---|---|
atamak | Bir karakter değerini diğerine atar. |
karşılaştırmak | İki dizede belirtilen sayıda karakterle karşılaştırır. |
kopya etmek | Belirtilen sayıda karakteri bir dizeden diğerine kopyalar. Kullanımdan kaldırıldı. Bunun yerine char_traits::_Copy_s kullanın. |
_Copy_s | Belirtilen sayıda karakteri bir dizeden diğerine kopyalar. |
eof | Dosya sonu (EOF) karakterini döndürür. |
Eq | İki char_type karakterin eşit olup olmadığını sınar. |
eq_int_type | S olarak int_type temsil edilen iki karakterin eşit olup olmadığını sınar. |
find | Bir karakter aralığında belirtilen karakterin ilk oluşumunu arar. |
length | Bir dizenin uzunluğunu döndürür. |
Lt | Bir karakterin başka bir karakterden küçük olup olmadığını sınar. |
hareket etmek | Bir dizideki belirtilen sayıda karakteri başka bir olası örtüşme dizisine kopyalar. Kullanımdan kaldırıldı. Bunun yerine char_traits::_Move_s kullanın. |
_Move_s | Bir dizideki belirtilen sayıda karakteri başka bir olası örtüşme dizisine kopyalar. |
not_eof | Bir karakterin dosya sonu (EOF) karakteri olup olmadığını sınar. |
to_char_type | Bir int_type karakteri ilgili char_type karaktere dönüştürür ve sonucu döndürür. |
to_int_type | Bir char_type karakteri ilgili int_type karaktere dönüştürür ve sonucu döndürür. |
Gereksinimler
Üst bilgi:<dize>
Ad alanı: std
char_traits::assign
Bir karakter değerini başka bir karaktere veya dizedeki bir öğe aralığına atar.
static void assign(char_type& _CharTo,
const char_type& _CharFrom);
static char_type *assign(char_type* strTo,
size_t _Num,
char_type _CharFrom);
Parametreler
_ CharFrom Değeri atanacak olan karakter.
_CharTo
Karakter değeri atanacak öğe.
strTo
İlk öğelerine karakter değerleri atanacak dize veya karakter dizisi.
_Num
Değer atanacak öğe sayısı.
Dönüş Değeri
İkinci üye işlevi, ilk _Num öğelerine _CharFrom değerleri atanmış olan dizeye bir işaretçi döndürür.
Örnek
// char_traits_assign.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
// The first member function assigning
// one character value to another character
char ChTo = 't';
const char ChFrom = 'f';
cout << "The initial characters ( ChTo , ChFrom ) are: ( "
<< ChTo << " , " << ChFrom << " )." << endl;
char_traits<char>::assign ( ChTo , ChFrom );
cout << "After assigning, the characters ( ChTo , ChFrom ) are: ( "
<< ChTo << " , " << ChFrom << " )." << endl << endl;
// The second member function assigning
// character values to initial part of a string
char_traits<char>::char_type s1[] = "abcd-1234-abcd";
char_traits<char>::char_type* result1;
cout << "The target string s1 is: " << s1 << endl;
result1 = char_traits<char>::assign ( s1 , 4 , 'f' );
cout << "The result1 = assign ( s1 , 4 , 'f' ) is: "
<< result1 << endl;
}
The initial characters ( ChTo , ChFrom ) are: ( t , f ).
After assigning, the characters ( ChTo , ChFrom ) are: ( f , f ).
The target string s1 is: abcd-1234-abcd
The result1 = assign ( s1 , 4 , 'f' ) is: ffff-1234-abcd
char_traits::char_type
Karakter türü.
typedef CharType char_type;
Açıklamalar
türü, şablon parametresi CharType
için bir eş anlamlıdır.
Örnek
nasıl bildirilip kullanılacağına char_type
ilişkin bir örnek için kopya örneğine bakın.
char_traits::compare
İki dizede belirtilen sayıda karakterle karşılaştırır.
static int compare(const char_type* str1,
const char_type* str2,
size_t _Num);
Parametreler
str1
Birbiriyle karşılaştırılacak iki dizeden ilki.
str2
Birbiriyle karşılaştırılacak iki dizenin ikincisi.
_Num
Dizelerdeki karşılaştırılacak öğe sayısı.
Dönüş Değeri
İlk dize ikinci dizeden küçükse negatif bir değer, iki dize eşitse 0 veya ikinci dizeden büyükse pozitif bir değer.
Açıklamalar
Dizeler arasındaki karşılaştırma öğeye göre yapılır, önce eşitlik testi yapılır ve ardından dizi testlerindeki bir öğe çifti eşit değilse, daha azı için test edilir.
İki dize bir aralığa eşitse ancak biri diğerinden uzunsa, iki dizenin kısası uzun olandan daha kısadır.
Örnek
// char_traits_compare.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main() {
using namespace std;
char_traits<char>::char_type* s1 = "CAB";
char_traits<char>::char_type* s2 = "ABC";
char_traits<char>::char_type* s3 = "ABC";
char_traits<char>::char_type* s4 = "ABCD";
cout << "The string s1 is: " << s1 << endl;
cout << "The string s2 is: " << s2 << endl;
cout << "The string s3 is: " << s3 << endl;
cout << "The string s4 is: " << s4 << endl;
int comp1, comp2, comp3, comp4;
comp1 = char_traits<char>::compare ( s1 , s2 , 2 );
comp2 = char_traits<char>::compare ( s2 , s3 , 3 );
comp3 = char_traits<char>::compare ( s3 , s4 , 4 );
comp4 = char_traits<char>::compare ( s4 , s3 , 4 );
cout << "compare ( s1 , s2 , 2 ) = " << comp1 << endl;
cout << "compare ( s2 , s3 , 3 ) = " << comp2 << endl;
cout << "compare ( s3 , s4 , 4 ) = " << comp3 << endl;
cout << "compare ( s4 , s3 , 4 ) = " << comp4 << endl;
}
char_traits::copy
Belirtilen sayıda karakteri bir dizeden diğerine kopyalar.
Geçirilen değerlerin doğru olup olmadığını denetlemek için çağıranı kullanan bu yöntem güvenli olmayabilir. Bunun yerine char_traits::_Copy_s kullanmayı düşünün.
static char_type *copy(char_type* _To,
const char_type* _From,
size_t _Num);
Parametreler
_Hedef
Kopyalanan karakter dizisini almayı hedefleyen dize veya karakter dizisinin başındaki öğesi.
_Kaynak
Kopyalanacak kaynak dizenin veya karakter dizisinin başındaki öğesi.
_Num
Kopyalanacak öğe sayısı.
Dönüş Değeri
Kopyalanan karakter dizisini almayı hedefleyen dize veya karakter dizisine kopyalanan ilk öğe.
Açıklamalar
Kaynak ve hedef karakter dizileri çakışmamalıdır.
Örnek
// char_traits_copy.cpp
// compile with: /EHsc /W3
#include <string>
#include <iostream>
int main( )
{
using namespace std;
char_traits<char>::char_type s1[] = "abcd-1234-abcd";
char_traits<char>::char_type s2[] = "ABCD-1234";
char_traits<char>::char_type* result1;
cout << "The source string is: " << s1 << endl;
cout << "The destination string is: " << s2 << endl;
// Note: char_traits::copy is potentially unsafe, consider
// using char_traits::_Copy_s instead.
result1 = char_traits<char>::copy ( s1 , s2 , 4 ); // C4996
cout << "The result1 = copy ( s1 , s2 , 4 ) is: "
<< result1 << endl;
}
The source string is: abcd-1234-abcd
The destination string is: ABCD-1234
The result1 = copy ( s1 , s2 , 4 ) is: ABCD-1234-abcd
char_traits::_Copy_s
Belirtilen sayıda karakteri bir dizeden diğerine kopyalar.
static char_type *_Copy_s(
char_type* dest,
size_t dest_size,
const char_type* _From,
size_t count);
Parametreler
dest
Kopyalanan karakter dizisini almak için hedeflenen dize veya karakter dizisi.
dest_size
Dest boyutu. ise char_type
char
, bu boyut bayt cinsindendir. ise char_type
wchar_t
, bu boyut sözcüklerle ifade edilir.
_Kaynak
Kopyalanacak kaynak dize veya karakter dizisi.
count
Kopyalanacak öğe sayısı.
Dönüş Değeri
Kopyalanan karakter dizisini almak için hedeflenen dize veya karakter dizisi.
Açıklamalar
Kaynak ve hedef karakter dizileri çakışmamalıdır.
Örnek
// char_traits__Copy_s.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
char_traits<char>::char_type s1[] = "abcd-1234-abcd";
char_traits<char>::char_type s2[] = "ABCD-1234";
char_traits<char>::char_type* result1;
cout << "The source string is: " << s1 << endl;
cout << "The destination string is: " << s2 << endl;
result1 = char_traits<char>::_Copy_s(s1,
char_traits<char>::length(s1), s2, 4);
cout << "The result1 = _Copy_s(s1, "
<< "char_traits<char>::length(s1), s2, 4) is: "
<< result1 << endl;
}
The source string is: abcd-1234-abcd
The destination string is: ABCD-1234
The result1 = _Copy_s(s1, char_traits<char>::length(s1), s2, 4) is: ABCD-1234-abcd
char_traits::eof
Dosya sonu (EOF) karakterini döndürür.
static int_type eof();
Dönüş Değeri
EOF karakteri.
Açıklamalar
Dosya sonunu (EOF veya WEOF gibi) temsil eden bir değer.
C++ standardı bu değerin geçerli char_type
bir değere karşılık olmaması gerektiğini belirtir. Microsoft C++ derleyicisi bu kısıtlamayı türü char
için zorlar, ancak türü wchar_t
için zorlamaz. Aşağıdaki örnek bunu gösterir.
Örnek
// char_traits_eof.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main()
{
using namespace std;
char_traits<char>::char_type ch1 = 'x';
char_traits<char>::int_type int1;
int1 = char_traits<char>::to_int_type(ch1);
cout << "char_type ch1 is '" << ch1 << "' and corresponds to int_type "
<< int1 << "." << endl << endl;
char_traits<char>::int_type int2 = char_traits<char>::eof();
cout << "The eof marker for char_traits<char> is: " << int2 << endl;
char_traits<wchar_t>::int_type int3 = char_traits<wchar_t>::eof();
cout << "The eof marker for char_traits<wchar_t> is: " << int3 << endl;
}
char_type ch1 is 'x' and corresponds to int_type 120.
The eof marker for char_traits<char> is: -1
The eof marker for char_traits<wchar_t> is: 65535
char_traits::eq
İki char_type
karakterin eşit olup olmadığını sınar.
static bool eq(const char_type& _Ch1, const char_type& _Ch2);
Parametreler
_Ch1
Eşitlik için test edilecek iki karakterden ilki.
_Ch2
Eşitlik için test edilecek iki karakterden ikincisi.
Dönüş Değeri
true
birinci karakter ikinci karaktere eşitse; aksi takdirde false
.
Örnek
// char_traits_eq.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
char_traits<char>::char_type ch1 = 'x';
char_traits<char>::char_type ch2 = 'y';
char_traits<char>::char_type ch3 = 'x';
// Testing for equality
bool b1 = char_traits<char>::eq ( ch1 , ch2 );
if ( b1 )
cout << "The character ch1 is equal "
<< "to the character ch2." << endl;
else
cout << "The character ch1 is not equal "
<< "to the character ch2." << endl;
// An equivalent and alternatively test procedure
if ( ch1 == ch3 )
cout << "The character ch1 is equal "
<< "to the character ch3." << endl;
else
cout << "The character ch1 is not equal "
<< "to the character ch3." << endl;
}
The character ch1 is not equal to the character ch2.
The character ch1 is equal to the character ch3.
char_traits::eq_int_type
S olarak int_type
temsil edilen iki karakterin eşit olup olmadığını sınar.
static bool eq_int_type(const int_type& _Ch1, const int_type& _Ch2);
Parametreler
_Ch1
Eşitlik int_type
için sınanacak iki karakterden ilki.
_Ch2
Eşitlik int_type
için sınanacak iki karakterden ikincisi.
Dönüş Değeri
true
birinci karakter ikinci karaktere eşitse; aksi takdirde false
.
Örnek
// char_traits_eq_int_type.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
char_traits<char>::char_type ch1 = 'x';
char_traits<char>::char_type ch2 = 'y';
char_traits<char>::char_type ch3 = 'x';
// Converting from char_type to int_type
char_traits<char>::int_type int1, int2 , int3;
int1 =char_traits<char>:: to_int_type ( ch1 );
int2 =char_traits<char>:: to_int_type ( ch2 );
int3 =char_traits<char>:: to_int_type ( ch3 );
cout << "The char_types and corresponding int_types are:"
<< "\n ch1 = " << ch1 << " corresponding to int1 = "
<< int1 << "."
<< "\n ch2 = " << ch2 << " corresponding to int1 = "
<< int2 << "."
<< "\n ch3 = " << ch3 << " corresponding to int1 = "
<< int3 << "." << endl << endl;
// Testing for equality of int_type representations
bool b1 = char_traits<char>::eq_int_type ( int1 , int2 );
if ( b1 )
cout << "The int_type representation of character ch1\n "
<< "is equal to the int_type representation of ch2."
<< endl;
else
cout << "The int_type representation of character ch1\n is "
<< "not equal to the int_type representation of ch2."
<< endl;
// An equivalent and alternatively test procedure
if ( int1 == int3 )
cout << "The int_type representation of character ch1\n "
<< "is equal to the int_type representation of ch3."
<< endl;
else
cout << "The int_type representation of character ch1\n is "
<< "not equal to the int_type representation of ch3."
<< endl;
}
The char_types and corresponding int_types are:
ch1 = x corresponding to int1 = 120.
ch2 = y corresponding to int1 = 121.
ch3 = x corresponding to int1 = 120.
The int_type representation of character ch1
is not equal to the int_type representation of ch2.
The int_type representation of character ch1
is equal to the int_type representation of ch3.
char_traits::find
Bir karakter aralığında belirtilen karakterin ilk oluşumunu arar.
static const char_type* find(const char_type* str,
size_t _Num,
const char_type& _Ch);
Parametreler
str
Aranacak dizedeki ilk karakter.
_Num
Aranacak aralıktaki ilk konumlardan sayılan konum sayısı.
_Caner
Aralıkta aranacak karakter.
Dönüş Değeri
Bir eşleşme bulunursa, aralıkta belirtilen karakterin ilk oluşumunun işaretçisi; aksi takdirde, null işaretçi.
Örnek
// char_traits_find.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
const char* s1 = "f2d-1234-abcd";
const char* result1;
cout << "The string to be searched is: " << s1 << endl;
// Searching for a 'd' in the first 6 positions of string s1
result1 = char_traits<char>::find ( s1 , 6 , 'd');
cout << "The character searched for in s1 is: "
<< *result1 << endl;
cout << "The string beginning with the first occurrence\n "
<< "of the character 'd' is: " << result1 << endl;
// When no match is found the NULL value is returned
const char* result2;
result2 = char_traits<char>::find ( s1 , 3 , 'a');
if ( result2 == NULL )
cout << "The result2 of the search is NULL." << endl;
else
cout << "The result2 of the search is: " << result1
<< endl;
}
The string to be searched is: f2d-1234-abcd
The character searched for in s1 is: d
The string beginning with the first occurrence
of the character 'd' is: d-1234-abcd
The result2 of the search is NULL.
char_traits::int_type
Tür veya dosya sonu (EOF) karakterini char_type
temsil eden bir tamsayı türü.
typedef long int_type;
Açıklamalar
Özgün değeri değiştirmeden türün CharType
int_type
bir değerinin sonradan geri döndürülecek CharType
şekilde yazılması mümkün olmalıdır.
Örnek
bildirme ve kullanma int_type
örneği için eq_int_type örneğine bakın.
char_traits::length
Bir dizenin uzunluğunu döndürür.
static size_t length(const char_type* str);
Parametreler
str
Uzunluğu ölçülecek olan C dizesi.
Dönüş Değeri
Null sonlandırıcı dahil değil, ölçülen dizideki öğelerin sayısı.
Örnek
// char_traits_length.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
const char* str1= "Hello";
cout << "The C-string str1 is: " << str1 << endl;
size_t lenStr1;
lenStr1 = char_traits<char>::length ( str1 );
cout << "The length of C-string str1 is: "
<< lenStr1 << "." << endl;
}
The C-string str1 is: Hello
The length of C-string str1 is: 5.
char_traits::lt
Bir karakterin başka bir karakterden küçük olup olmadığını sınar.
static bool lt(const char_type& _Ch1, const char_type& _Ch2);
Parametreler
_Ch1
Küçüktür için test edilecek iki karakterden ilki.
_Ch2
Daha azı için test edilecek iki karakterden ikincisi.
Dönüş Değeri
true
birinci karakter ikinci karakterden küçükse; aksi takdirde false
.
Örnek
// char_traits_lt.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
char_traits<char>::char_type ch1 = 'x';
char_traits<char>::char_type ch2 = 'y';
char_traits<char>::char_type ch3 = 'z';
// Testing for less than
bool b1 = char_traits<char>::lt ( ch1 , ch2 );
if ( b1 )
cout << "The character ch1 is less than "
<< "the character ch2." << endl;
else
cout << "The character ch1 is not less "
<< "than the character ch2." << endl;
// An equivalent and alternatively test procedure
if ( ch3 < ch2 )
cout << "The character ch3 is less than "
<< "the character ch2." << endl;
else
cout << "The character ch3 is not less "
<< "than the character ch2." << endl;
}
The character ch1 is less than the character ch2.
The character ch3 is not less than the character ch2.
char_traits::move
Bir dizideki belirtilen sayıda karakteri, çakışan başka bir diziye kopyalar.
Geçirilen değerlerin doğru olup olmadığını denetlemek için çağıranı kullanan bu yöntem güvenli olmayabilir. Bunun yerine char_traits::_Move_s kullanmayı düşünün.
static char_type *move(char_type* _To,
const char_type* _From,
size_t _Num);
Parametreler
_Hedef
Kopyalanan karakter dizisini almayı hedefleyen dize veya karakter dizisinin başındaki öğesi.
_Kaynak
Kopyalanacak kaynak dizenin veya karakter dizisinin başındaki öğesi.
_Num
Kaynak dizeden kopyalanacak öğe sayısı.
Dönüş Değeri
İlk öğe _To kopyalanan karakter dizisini almayı hedefleyen dizeye veya karakter dizisine kopyalanır.
Açıklamalar
Kaynak ve hedef çakışabilir.
Örnek
// char_traits_move.cpp
// compile with: /EHsc /W3
#include <string>
#include <iostream>
int main( )
{
using namespace std;
char_traits<char>::char_type sFrom1[] = "abcd-1234-abcd";
char_traits<char>::char_type sTo1[] = "ABCD-1234";
char_traits<char>::char_type* result1;
cout << "The source string sFrom1 is: " << sFrom1 << endl;
cout << "The destination stringsTo1 is: " << sTo1 << endl;
// Note: char_traits::move is potentially unsafe, consider
// using char_traits::_Move_s instead.
result1 = char_traits<char>::move ( sTo1 , sFrom1 , 4 ); // C4996
cout << "The result1 = move ( sTo1 , sFrom1 , 4 ) is: "
<< result1 << endl << endl;
// When source and destination overlap
char_traits<char>::char_type sToFrom2[] = "abcd-1234-ABCD";
char_traits<char>::char_type* result2;
cout << "The source/destination string sToFrom2 is: "
<< sToFrom2 << endl;
const char* findc = char_traits<char>::find ( sToFrom2 , 4 , 'c' );
// Note: char_traits::move is potentially unsafe, consider
// using char_traits::_Move_s instead.
result2 = char_traits<char>::move ( sToFrom2 , findc , 8 ); // C4996
cout << "The result2 = move ( sToFrom2 , findc , 8 ) is: "
<< result2 << endl;
}
The source string sFrom1 is: abcd-1234-abcd
The destination stringsTo1 is: ABCD-1234
The result1 = move ( sTo1 , sFrom1 , 4 ) is: abcd-1234
The source/destination string sToFrom2 is: abcd-1234-ABCD
The result2 = move ( sToFrom2 , findc , 8 ) is: cd-1234-4-ABCD
char_traits::_Move_s
Bir dizideki belirtilen sayıda karakteri, çakışan başka bir diziye kopyalar.
static char_type *_Move_s(
char_type* dest,
size_t dest_size,
const char_type* _From,
size_t count);
Parametreler
dest
Kopyalanan karakter dizisini almayı hedefleyen dize veya karakter dizisinin başındaki öğesi.
dest_size
Dest boyutu. ise char_type
char
, bu bayt cinsindendir. ise char_type
wchar_t
, bu sözcüklerle yapılır.
_Kaynak
Kopyalanacak kaynak dizenin veya karakter dizisinin başındaki öğesi.
count
Kaynak dizeden kopyalanacak öğe sayısı.
Dönüş Değeri
Kopyalanan karakter dizisini almak için hedeflenen dizeye veya karakter dizisine kopyalanan ilk öğe.
Açıklamalar
Kaynak ve hedef çakışabilir.
Örnek
// char_traits__Move_s.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
char_traits<char>::char_type sFrom1[] = "abcd-1234-abcd";
char_traits<char>::char_type sTo1[] = "ABCD-1234";
char_traits<char>::char_type* result1;
cout << "The source string sFrom1 is: " << sFrom1 << endl;
cout << "The destination stringsTo1 is: " << sTo1 << endl;
result1 = char_traits<char>::_Move_s(sTo1,
char_traits<char>::length(sTo1), sFrom1, 4);
cout << "The result1 = _Move_s(sTo1, "
<< "char_traits<char>::length(sTo1), sFrom1, 4) is: "
<< result1 << endl << endl;
// When source and destination overlap
char_traits<char>::char_type sToFrom2[] = "abcd-1234-ABCD";
char_traits<char>::char_type* result2;
cout << "The source/destination string sToFrom2 is: "
<< sToFrom2 << endl;
const char* findc = char_traits<char>::find(sToFrom2, 4, 'c');
result2 = char_traits<char>::_Move_s(sToFrom2,
char_traits<char>::length(sToFrom2), findc, 8);
cout << "The result2 = _Move_s(sToFrom2, "
<< "char_traits<char>::length(sToFrom2), findc, 8) is: "
<< result2 << endl;
}
The source string sFrom1 is: abcd-1234-abcd
The destination stringsTo1 is: ABCD-1234
The result1 = _Move_s(sTo1, char_traits<char>::length(sTo1), sFrom1, 4) is: abcd-1234
The source/destination string sToFrom2 is: abcd-1234-ABCD
The result2 = _Move_s(sToFrom2, char_traits<char>::length(sToFrom2), findc, 8) is: cd-1234-4-ABCD
char_traits::not_eof
Bir karakterin dosya sonu (EOF) karakteri mi yoksa EOF mi olduğunu sınar.
static int_type not_eof(const int_type& _Ch);
Parametreler
_Caner
EOF karakteri olup olmadığı için test edilecek olarak temsil edilen int_type
karakter.
Dönüş Değeri
Karakterin int_type
gösterimi, EOF karakterinin gösterimine eşit değilse int_type
test edilir.
Karakter int_type
değeri EOF int_type
değerine eşitse, değerini seçin false
.
Örnek
// char_traits_not_eof.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( ) {
using namespace std;
char_traits<char>::char_type ch1 = 'x';
char_traits<char>::int_type int1;
int1 = char_traits<char>:: to_int_type ( ch1 );
cout << "The char_type ch1 is " << ch1
<< " corresponding to int_type: "
<< int1 << "." << endl;
// EOF member function
char_traits <char>::int_type int2 = char_traits<char>::eof ( );
cout << "The eofReturn is: " << int2 << endl;
// Testing for EOF or another character
char_traits <char>::int_type eofTest1, eofTest2;
eofTest1 = char_traits<char>::not_eof ( int1 );
if ( !eofTest1 )
cout << "The eofTest1 indicates ch1 is an EOF character."
<< endl;
else
cout << "The eofTest1 returns: " << eofTest1
<< ", which is the character: "
<< char_traits<char>::to_char_type ( eofTest1 )
<< "." << endl;
eofTest2 = char_traits<char>::not_eof ( int2 );
if ( !eofTest2 )
cout << "The eofTest2 indicates int2 is an EOF character."
<< endl;
else
cout << "The eofTest1 returns: " << eofTest2
<< ", which is the character: "
<< char_traits<char>::to_char_type ( eofTest2 )
<< "." << endl;
}
The char_type ch1 is x corresponding to int_type: 120.
The eofReturn is: -1
The eofTest1 returns: 120, which is the character: x.
The eofTest2 indicates int2 is an EOF character.
char_traits::off_type
Bir akıştaki konumlar arasındaki uzaklıkları gösterebilen bir tamsayı türü.
typedef streamoff off_type;
Açıklamalar
Türü, çeşitli akış konumlandırma işlemlerinde yer alan bayt uzaklığını depolayan bir nesneyi tanımlayan imzalı bir tamsayıdır. Genellikle streamoff için bir eş anlamlıdır, ancak temelde bu türle aynı özelliklere sahiptir.
char_traits::p os_type
Bir akıştaki konumları gösterebilen bir tamsayı türü.
typedef streampos pos_type;
Açıklamalar
Türü, bir akış içinde rastgele bir dosya konumu göstergesini geri yüklemek için gereken tüm bilgileri depolayan bir nesneyi açıklar. Genellikle akışlar için bir eş anlamlıdır, ancak her durumda temelde bu türle aynı özelliklere sahiptir.
char_traits::state_type
Akıştaki çok baytlı karakterler için dönüştürme durumunu temsil eden bir tür.
typedef implementation-defined state_type;
Açıklamalar
Türü, dönüştürme durumunu temsil eden bir nesneyi açıklar. Genellikle için mbstate_t
bir eş anlamlıdır, ancak her durumda temelde bu türle aynı özelliklere sahiptir.
char_traits::to_char_type
Bir int_type
karakteri ilgili char_type
karaktere dönüştürür ve sonucu döndürür.
static char_type to_char_type(const int_type& _Ch);
Parametreler
_Caner
int_type
olarak char_type
temsil edilecek karakter.
Dönüş Değeri
Karaktere char_type
int_type
karşılık gelen karakter.
Bu şekilde temsil edilemeyen _Ch değeri belirtilmemiş bir sonuç verir.
Açıklamalar
Dönüştürme işlemleri to_int_type ve to_char_type
birbirine terstir, böylece:
to_int_type
( to_char_type
( x ) ) == x
herhangi bir int_type
x ve için
to_char_type
( to_int_type
( x ) ) == x
herhangi bir char_type
x için.
Örnek
// char_traits_to_char_type.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
char_traits<char>::char_type ch1 = 'a';
char_traits<char>::char_type ch2 = 'b';
char_traits<char>::char_type ch3 = 'a';
// Converting from char_type to int_type
char_traits<char>::int_type int1, int2 , int3;
int1 =char_traits<char>:: to_int_type ( ch1 );
int2 =char_traits<char>:: to_int_type ( ch2 );
int3 =char_traits<char>:: to_int_type ( ch3 );
cout << "The char_types and corresponding int_types are:"
<< "\n ch1 = " << ch1 << " corresponding to int1 = "
<< int1 << "."
<< "\n ch2 = " << ch2 << " corresponding to int1 = "
<< int2 << "."
<< "\n ch3 = " << ch3 << " corresponding to int1 = "
<< int3 << "." << endl << endl;
// Converting from int_type back to char_type
char_traits<char>::char_type rec_ch1;
rec_ch1 = char_traits<char>:: to_char_type ( int1);
char_traits<char>::char_type rec_ch2;
rec_ch2 = char_traits<char>:: to_char_type ( int2);
cout << "The recovered char_types and corresponding int_types are:"
<< "\n recovered ch1 = " << rec_ch1 << " from int1 = "
<< int1 << "."
<< "\n recovered ch2 = " << rec_ch2 << " from int2 = "
<< int2 << "." << endl << endl;
// Testing that the conversions are inverse operations
bool b1 = char_traits<char>::eq ( rec_ch1 , ch1 );
if ( b1 )
cout << "The recovered char_type of ch1"
<< " is equal to the original ch1." << endl;
else
cout << "The recovered char_type of ch1"
<< " is not equal to the original ch1." << endl;
// An equivalent and alternatively test procedure
if ( rec_ch2 == ch2 )
cout << "The recovered char_type of ch2"
<< " is equal to the original ch2." << endl;
else
cout << "The recovered char_type of ch2"
<< " is not equal to the original ch2." << endl;
}
The char_types and corresponding int_types are:
ch1 = a corresponding to int1 = 97.
ch2 = b corresponding to int1 = 98.
ch3 = a corresponding to int1 = 97.
The recovered char_types and corresponding int_types are:
recovered ch1 = a from int1 = 97.
recovered ch2 = b from int2 = 98.
The recovered char_type of ch1 is equal to the original ch1.
The recovered char_type of ch2 is equal to the original ch2.
char_traits::to_int_type
Bir char_type
karakteri ilgili int_type
karaktere dönüştürür ve sonucu döndürür.
static int_type to_int_type(const char_type& _Ch);
Parametreler
_Caner
char_type
olarak int_type
temsil edilecek karakter.
Dönüş Değeri
Karaktere int_type
char_type
karşılık gelen karakter.
Açıklamalar
Dönüştürme işlemleri to_int_type
ve to_char_type birbirine terstir, böylece:
to_int_type
( to_char_type
( x ) ) == x
herhangi bir int_type
x için ve
to_char_type
( to_int_type
( x ) ) == x
herhangi bir char_type
x için.
Örnek
// char_traits_to_int_type.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
char_traits<char>::char_type ch1 = 'a';
char_traits<char>::char_type ch2 = 'b';
char_traits<char>::char_type ch3 = 'a';
// Converting from char_type to int_type
char_traits<char>::int_type int1, int2 , int3;
int1 =char_traits<char>:: to_int_type ( ch1 );
int2 =char_traits<char>:: to_int_type ( ch2 );
int3 =char_traits<char>:: to_int_type ( ch3 );
cout << "The char_types and corresponding int_types are:"
<< "\n ch1 = " << ch1 << " corresponding to int1 = "
<< int1 << "."
<< "\n ch2 = " << ch2 << " corresponding to int1 = "
<< int2 << "."
<< "\n ch3 = " << ch3 << " corresponding to int1 = "
<< int3 << "." << endl << endl;
// Converting from int_type back to char_type
char_traits<char>::char_type rec_ch1;
rec_ch1 = char_traits<char>:: to_char_type ( int1);
char_traits<char>::char_type rec_ch2;
rec_ch2 = char_traits<char>:: to_char_type ( int2);
cout << "The recovered char_types and corresponding int_types are:"
<< "\n recovered ch1 = " << rec_ch1 << " from int1 = "
<< int1 << "."
<< "\n recovered ch2 = " << rec_ch2 << " from int2 = "
<< int2 << "." << endl << endl;
// Testing that the conversions are inverse operations
bool b1 = char_traits<char>::eq ( rec_ch1 , ch1 );
if ( b1 )
cout << "The recovered char_type of ch1"
<< " is equal to the original ch1." << endl;
else
cout << "The recovered char_type of ch1"
<< " is not equal to the original ch1." << endl;
// An equivalent and alternatively test procedure
if ( rec_ch2 == ch2 )
cout << "The recovered char_type of ch2"
<< " is equal to the original ch2." << endl;
else
cout << "The recovered char_type of ch2"
<< " is not equal to the original ch2." << endl;
}
The char_types and corresponding int_types are:
ch1 = a corresponding to int1 = 97.
ch2 = b corresponding to int1 = 98.
ch3 = a corresponding to int1 = 97.
The recovered char_types and corresponding int_types are:
recovered ch1 = a from int1 = 97.
recovered ch2 = b from int2 = 98.
The recovered char_type of ch1 is equal to the original ch1.
The recovered char_type of ch2 is equal to the original ch2.