Selasa, 16 Desember 2014

String C++

STRING PADA C++
C++ menyediakan cara mudah, untuk menggunakan char*s untuk hal strings. C++ kelas string ,bagian dari std namespace, membuatmu mudah memanipulasi string(kata).
Deklarasi String mudah:
using namespace std;
string my_string;

atau
std::string my_string;


Kita juga langsung dapat memasukan nilai:
using namespace std;
string my_string("starting value");

String I/O sangat mudah,dengan string yang didukung cin.
cin>>my_string;

Jika perlu membaca seluruh baris pada satu waktu, dapat menggunakan fungsi getline dan pass dalam suatu objek input stream (seperti cin, untuk membaca dari input standar, atau aliran yang berhubungan dengan file, membaca dari sebuah file) , string, dan karakter yang untuk mengakhiri masukan. Kode berikut membaca garis dari masukan standar (misalnya, keyboard) sampai baris baru dimasukkan.
using namespace std;
getline(cin, my_string, '\n');
Rangkaian String
String juga dapat ditugaskan untuk satu sama lain atau ditambahkan bersama-sama menggunakan operator +:
string my_string1 = "a string";
string my_string2 = " is this";
string my_string3 = my_string1 + my_string2;

// Will ouput "a string is this"
cout<<my_string3<<endl;
Tentu saja, + = operator juga didefinisikan! Rangkaian string akan bekerja selama salah satu dari dua string adalah C ++ String -- yang lain dapat berupa string statis atau char *.
String Perbandingan
Salah satu bagian yang paling membingungkan menggunakan char * s sebagai string adalah bahwa perbandingan yang rumit, memerlukan fungsi perbandingan khusus, dan menggunakan tes seperti == atau <tidak berarti apa yang Anda harapkan. Untungnya, untuk C ++ string, semua khas relasional operator bekerja seperti yang diharapkan untuk membandingkan baik C ++ string atau C ++ dan string baik string C atau string statis (yaitu, "satu dalam tanda kutip").

Sebagai contoh, kode berikut tidak persis apa yang Anda harapkan, yaitu menentukan apakah string input sama dengan string tetap:
string passwd;

getline(cin, passwd, '\n');
if(passwd == "xyzzy")
{
    cout<<"Access allowed";
}
String Panjang dan Mengakses Individu Elemen
Untuk mengambil panjang string, Anda dapat menggunakan panjang atau ukuran fungsi, yang merupakan anggota dari kelas String, dan yang mengembalikan jumlah karakter dalam string:
string my_string1 = "ten chars.";
int len = my_string1.length(); // or .size();
String, seperti string C (char * s), dapat diindeks secara numerik. Misalnya, Anda bisa beralih di atas semua karakter dalam string mengindeks mereka dengan nomor, seolah-olah string adalah array.

Perhatikan bahwa penggunaan panjang () atau ukuran () fungsi penting di sini karena string C ++ tidak dijamin akan null-dihentikan (oleh '\ 0'). (Bahkan, Anda harus dapat menyimpan byte dengan nilai 0 dalam C ++ string dengan tanpa efek samping. Dalam string C, ini akan mengakhiri string!)
int i;
for(i = 0; i < my_string.length(); i++)
{
    cout<<my_string[i];
}
Di sisi lain, string sebenarnya adalah rangkaian, sama seperti wadah STL lainnya, sehingga Anda dapat menggunakan iterator untuk beralih di atas isi dari string.
string::iterator my_iter;
for(my_iter = my_string.begin(); my_iter != my_string.end(); my_iter++)
{
    cout<<*my_iter;
}
Perhatikan bahwa my_string.end () berada di luar akhir string, sehingga kita tidak ingin mencetaknya, sedangkan my_string.begin () adalah pada karakter pertama dari string.

Kebetulan, C ++ String iterator mudah diremehkan oleh operasi yang mengubah string, jadi waspadalah saat menggunakan setelah memanggil fungsi string yang dapat mengubah
String pencarian dan Substring
Kelas String mendukung pencarian dan pengambilan substring sederhana dengan menggunakan fungsi find (), rfind (), dan substr (). Fungsi anggota find mengambil string dan posisi dan mulai mencari string dari posisi yang diberikan untuk kejadian pertama dari string yang diberikan. Ia mengembalikan posisi kejadian pertama string, atau nilai khusus, String :: npos, yang menunjukkan bahwa hal itu tidak menemukan substring.

Ini adalah apa fungsi prototipe find akan terlihat seperti. (Perhatikan bahwa saya telah menggunakan int di sini untuk kejelasan, tetapi mereka akan benar-benar menjadi tipe "size_type", yang unsigned.)
int find(string pattern, int position);
Contoh kode ini mencari setiap contoh string "cat" dalam string tertentu dan menghitung jumlah total kasus:
string input;
int i = 0;
int cat_appearances = 0;

getline(cin, input, '\n');

for(i = input.find("cat", 0); i != string::npos; i = input.find("cat", i))
{
    cat_appearances++;
    i++;  // Move past the last discovered instance to avoid finding same
          // string
}
cout<<cat_appearances;
Demikian pula, akan ada kemungkinan untuk menggunakan rfind di hampir dengan cara yang sama, kecuali pencarian yang akan dimulai di akhir string, bukan awal. (String pertandingan masih akan dari kiri ke kanan - yaitu, tidak akan cocok "Cat" dengan string yang berisi "tac".) Bagaimana Anda perlu mengubah program di atas untuk menggunakan rfind?

Di sisi lain, fungsi substr dapat digunakan untuk membuat string baru hanya terdiri dari sepotong string dimulai pada posisi tertentu dan panjang tertentu:

// sample prototype
string substr(int position, int length);
Sebagai contoh, untuk mengekstrak pertama sepuluh karakter dari string, Anda dapat menggunakan
string my_string = "abcdefghijklmnop";
string first_ten_of_alphabet = my_string.substr(0, 10);
cout<<"The first ten letters of the alphabet are "
    <<first_ten_of_alphabet;
Memodifikasi String melalui Penyambungan atau Erasure
Ini juga mungkin untuk memodifikasi string C ++ baik menghapus bagian dari string atau menambahkan teks baru. Dengan menghapus () fungsi terlihat sangat mirip dengan substr di prootype nya; dibutuhkan posisi dan jumlah karakter dan menghapus banyak karakter mulai dari posisi tertentu. Perhatikan posisi itu nol-diindeks, seperti biasa.
string my_removal = "remove aaa";
my_removal.erase(7, 3); // erases aaa
Untuk menghapus keseluruhan string bisa menggunakan
str.erase(0, str.length());
Di sisi lain, Anda juga dapat menyambung satu string menjadi lain. Fungsi anggota insert mengambil posisi dan string dan memasukkan string yang dimulai dari posisi yang diberikan:
string my_string = "ade";
my_string.insert(1, "bc");
// my_string is now "abcde"
cout<<my_string<<endl;

Rangkaian String dapat diimplementasikan dalam hal memasukkan, menggunakan posisi melewati elemen terakhir dari string sebagai titik penyisipan (yaitu, str.length ()). Mencoba untuk memasukkan di luar panjang string akan menghasilkan kesalahan segmentasi. 

4 komentar: