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_type sama. |
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 CharType
templat .
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_type
sama 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.