Bagikan melalui


char_traits Struct

Struktur char_traits menjelaskan atribut yang terkait dengan karakter.

Sintaks

template <class CharType>
struct char_traits;

Parameter

CharType
Jenis data elemen.

Keterangan

Struktur templat menjelaskan berbagai sifat karakter untuk jenis CharType. Templat kelas basic_string serta beberapa templat kelas iostream, termasuk basic_ios, gunakan informasi ini untuk memanipulasi elemen jenis CharType. Jenis elemen seperti itu tidak boleh memerlukan konstruksi atau penghancuran eksplisit. Ini harus menyediakan konstruktor default, konstruktor salinan, dan operator penugasan, dengan semantik yang diharapkan. Salinan bitwise harus memiliki efek yang sama dengan penugasan. Tidak satu pun dari fungsi anggota struct char_traits dapat melemparkan pengecualian.

Typedefs

Nama jenis Deskripsi
char_type Jenis karakter.
int_type Jenis bilangan bulat yang dapat mewakili karakter jenis char_type atau karakter end-of-file (EOF).
off_type Jenis bilangan bulat yang dapat mewakili offset antara posisi dalam aliran.
pos_type Jenis bilangan bulat yang dapat mewakili posisi dalam aliran.
state_type Jenis yang mewakili status konversi untuk karakter multibyte dalam aliran.

Fungsi anggota

Fungsi anggota Deskripsi
Menetapkan Menetapkan satu nilai karakter ke nilai lainnya.
compare Membandingkan hingga jumlah karakter tertentu dalam dua string.
salin Menyalin jumlah karakter tertentu dari satu string ke string lainnya. Ditolak. Gunakan char_traits::_Copy_s sebagai gantinya.
_Copy_s Menyalin jumlah karakter tertentu dari satu string ke string lainnya.
Eof Mengembalikan karakter akhir file (EOF).
Eq Menguji apakah dua char_type karakter sama.
eq_int_type Menguji apakah dua karakter yang direpresentasikan sebagai int_typesama.
menemukan Mencari kemunculan pertama karakter tertentu dalam rentang karakter.
length Mengembalikan panjang string.
Lt Menguji apakah satu karakter kurang dari karakter lainnya.
bergerak Menyalin jumlah karakter tertentu secara berurutan ke karakter lain, kemungkinan tumpang tindih, urutan. Ditolak. Gunakan char_traits::_Move_s sebagai gantinya.
_Move_s Menyalin jumlah karakter tertentu secara berurutan ke karakter lain, kemungkinan tumpang tindih, urutan.
not_eof Menguji apakah karakter adalah karakter end-of-file (EOF).
to_char_type int_type Mengonversi karakter ke karakter yang char_type sesuai dan mengembalikan hasilnya.
to_int_type char_type Mengonversi karakter ke karakter yang int_type sesuai dan mengembalikan hasilnya.

Persyaratan

Header:<string>

Namespace: std

char_traits::assign

Menetapkan satu nilai karakter ke nilai lain atau ke rentang elemen dalam string.

static void assign(char_type& _CharTo,
    const char_type& _CharFrom);

static char_type *assign(char_type* strTo,
    size_t _Num,
    char_type _CharFrom);

Parameter

_ CharFrom Karakter yang nilainya akan ditetapkan.

_CharTo
Elemen yang akan ditetapkan nilai karakternya.

strTo
String atau array karakter yang elemen awalnya akan ditetapkan nilai karakternya.

_Num
Jumlah elemen yang akan ditetapkan nilainya.

Tampilkan Nilai

Fungsi anggota kedua mengembalikan penunjuk ke string yang elemen _Num pertamanya telah ditetapkan nilai _CharFrom.

Contoh

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

Jenis karakter.

typedef CharType char_type;

Keterangan

Jenisnya adalah sinonim untuk parameter CharTypetemplat .

Contoh

Lihat contoh untuk salinan untuk contoh cara mendeklarasikan dan menggunakan char_type.

char_traits::compare

Membandingkan hingga jumlah karakter tertentu dalam dua string.

static int compare(const char_type* str1,
    const char_type* str2,
    size_t _Num);

Parameter

str1
Yang pertama dari dua string yang akan dibandingkan satu sama lain.

str2
Kedua dari dua string yang akan dibandingkan satu sama lain.

_Num
Jumlah elemen dalam string yang akan dibandingkan.

Tampilkan Nilai

Nilai negatif jika string pertama kurang dari string kedua, 0 jika kedua string sama, atau nilai positif jika string pertama lebih besar dari string kedua.

Keterangan

Perbandingan antara string dibuat elemen berdasarkan elemen, pengujian pertama untuk kesetaraan dan kemudian, jika sepasang elemen dalam pengujian urutan tidak sama, mereka diuji kurang dari.

Jika dua string dibandingkan sama dengan rentang tetapi satu lebih panjang dari yang lain, maka yang lebih pendek dari keduanya kurang dari yang lebih panjang.

Contoh

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

Menyalin jumlah karakter tertentu dari satu string ke string lainnya.

Metode ini berpotensi tidak aman, karena bergantung pada pemanggil untuk memeriksa apakah nilai yang diteruskan sudah benar. Pertimbangkan untuk menggunakan char_traits::_Copy_s sebagai gantinya.

static char_type *copy(char_type* _To,
    const char_type* _From,
    size_t _Num);

Parameter

_Ke
Elemen di awal string atau array karakter yang ditargetkan untuk menerima urutan karakter yang disalin.

_Dari
Elemen di awal string sumber atau array karakter yang akan disalin.

_Num
Jumlah elemen yang akan disalin.

Tampilkan Nilai

Elemen pertama yang disalin ke dalam string atau array karakter yang ditargetkan untuk menerima urutan karakter yang disalin.

Keterangan

Urutan karakter sumber dan tujuan tidak boleh tumpang tindih.

Contoh

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

Menyalin jumlah karakter tertentu dari satu string ke string lainnya.

static char_type *_Copy_s(
    char_type* dest,
    size_t dest_size,
    const char_type* _From,
    size_t count);

Parameter

dest
String atau array karakter yang ditargetkan untuk menerima urutan karakter yang disalin.

dest_size
Ukuran dest. Jika char_type adalah char, maka ukuran ini dalam byte. Jika char_type adalah wchar_t, maka ukuran ini dalam kata-kata.

_Dari
String sumber atau array karakter yang akan disalin.

count
Jumlah elemen yang akan disalin.

Tampilkan Nilai

String atau array karakter yang ditargetkan untuk menerima urutan karakter yang disalin.

Keterangan

Urutan karakter sumber dan tujuan tidak boleh tumpang tindih.

Contoh

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

Mengembalikan karakter akhir file (EOF).

static int_type eof();

Tampilkan Nilai

Karakter EOF.

Keterangan

Nilai yang mewakili akhir file (seperti EOF atau WEOF).

Standar C++ menyatakan bahwa nilai ini tidak boleh sesuai dengan nilai yang valid char_type . Pengkompilasi Microsoft C++ memberlakukan batasan ini untuk jenis char, tetapi tidak untuk jenis wchar_t. Contoh di bawah ini menunjukkan hal ini.

Contoh

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

Menguji apakah dua char_type karakter sama.

static bool eq(const char_type& _Ch1, const char_type& _Ch2);

Parameter

_Ch1
Karakter pertama dari dua karakter yang akan diuji untuk kesetaraan.

_Ch2
Karakter kedua dari dua karakter yang akan diuji untuk kesetaraan.

Tampilkan Nilai

true jika karakter pertama sama dengan karakter kedua; jika tidak false.

Contoh

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

Menguji apakah dua karakter yang diwakili sebagai int_typesama atau tidak.

static bool eq_int_type(const int_type& _Ch1, const int_type& _Ch2);

Parameter

_Ch1
Karakter pertama dari dua karakter yang akan diuji kesetaraannya.int_type

_Ch2
Karakter kedua dari dua karakter yang akan diuji untuk kesetaraan sebagai int_type.

Tampilkan Nilai

true jika karakter pertama sama dengan karakter kedua; jika tidak false.

Contoh

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

Mencari kemunculan pertama karakter tertentu dalam rentang karakter.

static const char_type* find(const char_type* str,
    size_t _Num,
    const char_type& _Ch);

Parameter

Str
Karakter pertama dalam string yang akan dicari.

_Num
Jumlah posisi, dihitung dari yang pertama, dalam rentang yang akan dicari.

_Ch
Karakter yang akan dicari dalam rentang.

Tampilkan Nilai

Penunjuk ke kemunculan pertama karakter yang ditentukan dalam rentang jika kecocokan ditemukan; jika tidak, pointer null.

Contoh

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

Jenis bilangan bulat yang dapat mewakili karakter jenis char_type atau karakter end-of-file (EOF).

typedef long int_type;

Keterangan

Harus dimungkinkan untuk mengetikkan nilai jenis CharType untuk int_type kemudian kembali tanpa CharType mengubah nilai asli.

Contoh

Lihat contoh untuk eq_int_type untuk contoh cara mendeklarasikan dan menggunakan int_type.

char_traits::length

Mengembalikan panjang string.

static size_t length(const char_type* str);

Parameter

Str
String C yang panjangnya akan diukur.

Tampilkan Nilai

Jumlah elemen dalam urutan yang diukur, tidak termasuk terminator null.

Contoh

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

Menguji apakah satu karakter kurang dari karakter lainnya.

static bool lt(const char_type& _Ch1, const char_type& _Ch2);

Parameter

_Ch1
Karakter pertama dari dua karakter yang akan diuji kurang dari.

_Ch2
Karakter kedua dari dua karakter yang akan diuji kurang dari.

Tampilkan Nilai

true jika karakter pertama kurang dari karakter kedua; jika tidak false.

Contoh

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

Menyalin jumlah karakter tertentu secara berurutan ke karakter lain, kemungkinan urutan tumpang tindih.

Metode ini berpotensi tidak aman, karena bergantung pada pemanggil untuk memeriksa apakah nilai yang diteruskan sudah benar. Pertimbangkan untuk menggunakan char_traits::_Move_s sebagai gantinya.

static char_type *move(char_type* _To,
    const char_type* _From,
    size_t _Num);

Parameter

_Ke
Elemen di awal string atau array karakter yang ditargetkan untuk menerima urutan karakter yang disalin.

_Dari
Elemen di awal string sumber atau array karakter yang akan disalin.

_Num
Jumlah elemen yang akan disalin dari string sumber.

Tampilkan Nilai

Elemen pertama _To disalin ke dalam string atau array karakter yang ditargetkan untuk menerima urutan karakter yang disalin.

Keterangan

Sumber dan tujuan mungkin tumpang tindih.

Contoh

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

Menyalin jumlah karakter tertentu secara berurutan ke karakter lain, kemungkinan urutan tumpang tindih.

static char_type *_Move_s(
    char_type* dest,
    size_t dest_size,
    const char_type* _From,
    size_t count);

Parameter

dest
Elemen di awal string atau array karakter yang ditargetkan untuk menerima urutan karakter yang disalin.

dest_size
Ukuran dest. Jika char_type adalah char, maka ini dalam byte. Jika char_type adalah wchar_t, maka ini dengan kata-kata.

_Dari
Elemen di awal string sumber atau array karakter yang akan disalin.

count
Jumlah elemen yang akan disalin dari string sumber.

Tampilkan Nilai

Elemen pertama dest disalin ke dalam string atau array karakter yang ditargetkan untuk menerima urutan karakter yang disalin.

Keterangan

Sumber dan tujuan mungkin tumpang tindih.

Contoh

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

Menguji apakah karakter bukan karakter end-of-file (EOF) atau EOF.

static int_type not_eof(const int_type& _Ch);

Parameter

_Ch
Karakter yang direpresentasikan sebagai yang int_type akan diuji apakah itu karakter EOF atau tidak.

Tampilkan Nilai

Representasi int_type karakter yang diuji, jika int_type karakter tidak sama dengan karakter EOF.

Jika nilai karakter int_type sama dengan nilai EOF int_type , maka false.

Contoh

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

Jenis bilangan bulat yang dapat mewakili offset antara posisi dalam aliran.

typedef streamoff off_type;

Keterangan

Jenisnya adalah bilangan bulat bertanda tangan yang menjelaskan objek yang dapat menyimpan offset byte yang terlibat dalam berbagai operasi pemosisian aliran. Biasanya sinonim untuk streamoff, tetapi pada dasarnya memiliki properti yang sama dengan jenis tersebut.

char_traits::p os_type

Jenis bilangan bulat yang dapat mewakili posisi dalam aliran.

typedef streampos pos_type;

Keterangan

Jenis menjelaskan objek yang dapat menyimpan semua informasi yang diperlukan untuk memulihkan indikator posisi file arbitrer dalam aliran. Biasanya sinonim untuk streampos, tetapi dalam hal apa pun itu pada dasarnya memiliki properti yang sama dengan jenis tersebut.

char_traits::state_type

Jenis yang mewakili status konversi untuk karakter multibyte dalam aliran.

typedef implementation-defined state_type;

Keterangan

Jenis menjelaskan objek yang dapat mewakili status konversi. Biasanya sinonim untuk mbstate_t, tetapi dalam hal apa pun pada dasarnya memiliki properti yang sama dengan jenis tersebut.

char_traits::to_char_type

int_type Mengonversi karakter ke karakter yang char_type sesuai dan mengembalikan hasilnya.

static char_type to_char_type(const int_type& _Ch);

Parameter

_Ch
Karakter int_type yang akan direpresentasikan sebagai char_type.

Tampilkan Nilai

Karakter char_type yang int_type sesuai dengan karakter.

Nilai _Ch yang tidak dapat direpresentasikan seperti itu menghasilkan hasil yang tidak ditentukan.

Keterangan

Operasi konversi to_int_type dan to_char_type terbalik satu sama lain, sehingga:

to_int_type( ( to_char_type x ) ) == x

untuk x int_type dan

to_char_type( ( to_int_type x ) ) == x

untuk x apa pun.char_type

Contoh

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

char_type Mengonversi karakter ke karakter yang int_type sesuai dan mengembalikan hasilnya.

static int_type to_int_type(const char_type& _Ch);

Parameter

_Ch
Karakter yang char_type akan direpresentasikan sebagai int_type.

Tampilkan Nilai

Karakter int_type yang char_type sesuai dengan karakter.

Keterangan

Operasi to_int_type konversi dan to_char_type terbalik satu sama lain, sehingga:

to_int_type( ( to_char_type x ) ) == x

untuk setiap int_type x, dan

to_char_type( ( to_int_type x ) ) == x

untuk x apa pun.char_type

Contoh

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

Lihat juga

Keamanan utas di Pustaka Standar C++