Học tập‎ > ‎C++‎ > ‎

hướng dẫn thao tác string variable.. kiểu dữ liệu string

Không thể tìm thấy URL thông số tiện ích

Nguồn: beautifulsoul84hung congdongcviet

Kiểu string có trong thư viện chuẩn (standard template library)của c++ (string # string.h)

1: Các phương thức, phép toán tiện ích của kiểu string.

-phép toán +, +=; dùng để ghép 2 chuỗi (tất nhiên là cũng ghép một ký tự vào chuỗi)
Vd:
C++ Code:

#include<iostream>
#include<string>

using namespace std;

int main()
{
       string fname = "Hung", mname= "Khac", sname= "Nguyen", Fname;
       string space = " ";
       Fname = sname+space+mname+space+fname;
       cout<<Fname<<endl;
       system("pause");
       return 0;
}

#include<iostream>
#include<string>

using namespace std;

int main()
{
       string name[]= {"Hung", "Khac", "Nguyen"};
       string Fname, space = " ";
       int n=sizeof(name)/sizeof(string);
       for(int i=n-1; i>=0;i--){
              Fname+=name[i]+space;
       }
       cout<<Fname<<endl;
       system("pause");
       return 0;
}

--------các phép toán so sánh theo thứ tự từ điển (==; !=; ……)

C++ Code:

#include<iostream>
#include<string>

using namespace std;
void swap(string *a, string *b);
int main()
{
       string name[]= {"Hung", "Khac", "ANguyen"};
       string Fname, space = " ";
       int n=sizeof(name)/sizeof(string);
       for(int i=0; i<n;i++){
              for(int j=i+1; j<n; j++){
                     if(name[i]>name[j])
                            swap(&name[i], &name[j]);
              }
       }
       for(int i=0; i<n; i++){
              cout<<name[i]+ space;
       }
       cout<<Fname<<endl;
       system("pause");
       return 0;
}
void swap(string *a, string *b){
       string tam;
       tam=*a;
       *a=*b;
       *b=tam;
}

---- phép gán (=);
----phương thức length();
Ta dùng phương thức này để duyệt từng kí tự của chuỗi
Giả sử như s là biến kiểu string thì s[i] là kí tự thứ i của s sao cho 0<=i<s.length();
<cũng có nghĩa là lấy độ dài của chuỗi s để có thể duyệt đến từng phần tử của nó>

C++ Code:

#include<iostream>
#include<string>

using namespace std;
void swap(string *a, string *b);
int main()
{
       char x[]= "Nguyen Khac Hung";
       string name = "xyz";
       cout<<name<<endl;
       name=x;
       cout<<name.length()<<"  : "<<name<<endl;
       system("pause");
       return 0;
}

2: Nhập dữ liệu
Cách nhập một string từ bàn phím
Form:
Getline( istream &in, string &str, ‘m’ );
Istream&in: có thể là cin(thường là cin), và trong trường hợp lấy dữ liệu từ file thì là đối tượng khác. Dữ liệu sẽ đc ghi vào string str đến khi gặp ký tự kết thúc là ‘m’ (giá trị này có thể có hoặc ko). Nếu ko có thì chương trình mặc định là \n. có thể dùng kết hợp toán tử >> để nhập
Vd: getline(cin, str)>> kt;

Trong đó str và kt đã đc khai báo….
Lệnh này yêu cầu đợi nhập từ bàn phím string str và một cái kt nào đó.
C++ Code:

// getline with strings
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string str;
short age;
cout << "Please enter full name and age"<< endl;
getline( cin, str) >> age;
cout << "Thank you " << str << "!\n";
return 0;
}

3:: chèn, xóa, lấy chuỗi con
a) lấy chuỗi con:
phương thức substr(int a, int b);
khi sử dụng là str.sub(int a, int b);
kết quả sẽ trả về một chuỗi từ chuỗi str.. sao cho lấy b ký tự kể từ vị trí thứ a.
C++ Code:

// substr(,)with string
#include <iostream>
#include <string>
using namespace std;
int main ()
{
       string str="Nguyen Khac Hung";
       cout<<"Ten ban: "<<str<<endl;
       cout << "Thank you " << str.substr(12,4) << "!\n";
       system("pause");
       return 0;
}

b) chèn

chèn một chuỗi vào một chuỗi(tất nhiên chèn một ký tự thì tương đương chuỗi)
để thực hiện thao tác chèn ta dùng phương thức insert(int a, int b, string c)
khi sử dụng ta dùng str.insert(int a, int b, string c);
khi đó mảng str là mảng sẽ được chèn vào còn a là vị trí sẽ đc chèn, b là số lần chèn, c chính là chuỗi dùng để chèn vào a. khi bỏ b đi thì mặc định nó là 1;
C++ Code:

#include <iostream>
#include <string>
using namespace std;
int main ()
{
       string str="Nguyen Hung";
       string mname= " khac";
       str.insert(6, mname);
       cout<<"Ten ban: "<< str.substr(12, 4)<<endl<< str<< endl;
       cout << "Thank you " << str << "!\n";
       system("pause");
       return 0;
}
c) xóa
để xóa kí tự trong string str ta dùng phương thức erase(int a, int b);
cách dùng: str.erase(a, b);
khi đó sẽ xóa b kí tự từ vị trí a;
C++ Code:

#include <iostream>
#include <string>
using namespace std;
int main ()
{
       string str="Nguyen Hung";
       string mname= " khac";
       str.insert(6, mname);
       cout<<"Ten ban: "<< str.substr(12, 4)<<endl<< str<< endl;
       cout << "Thank you " << str.erase(0,12) << "!\n";
       system("pause");
       return 0;
}

4) So sánh 2 chuỗi

Như có nói ở phía trên. Để so sánh 2 chuỗi ta có thể dùng các toán tử so sánh ==, !=……..
Nhưng khi so sánh 1 phần nào đó ta dùng phương thức compare
Cấu trúc:
int compare ( const string& str ) const;
int compare ( const char* s ) const;
int compare ( size_t pos1, size_t n1, const string& str ) const;
int compare ( size_t pos1, size_t n1, const char* s) const;
int compare ( size_t pos1, size_t n1, const string& str, size_t pos2, size_t n2 ) const;
int compare ( size_t pos1, size_t n1, const char* s, size_t n2) const;

vd:
str.compare(s): hàm này sẽ trả về giá trị =0 hoặc là khác 0
nếu như =0 thì 2 chuỗi này bằng nhau. Nếu ko thì khác nhau.

str.compare ( size_t pos1, size_t n1, s, size_t pos2, size_t n2);

khi này sẽ so sánh chuỗi str với chuỗi s nhưng ko pải so sánh toàn bộ 2 chuỗi mà là so sánh 2 phần của 2 chuỗi.
chuỗi str lấy từ pos1 và lấy n1 ký tự.
chuỗi s lấy từ pos2 và lấy n2 ký tự.
C++ Code:

#include <iostream>
#include <string>
using namespace std;
int main ()
{
string str1 ("green apple");
string str2 ("red apple");
if(str1.compare(str2)!=0)
cout<<"it is not the same"<<endl;
if(str1.compare(6, 5, str2, 4, 6)==0){
cout<<"it is apple"<<endl;}
system("pause");
return 0;
}
Các bạn sẽ thắc mắc là nếu như n1!=n2 thì hai chuỗi đc so sánh sẽ khác nhau
Vậy hãy xem kỹ ví dụ trên để hiểu hơn vấn đề này.
// chú ý thêm đó là một mảng ký tự thì gần như tương đương với chuỗi.

5) tìm kiếm và thay thế


- Phương thức tìm kiếm
str.find(char ch, int pos = 0);
str.find(char *s, int pos = 0);
str.find(string& s, int pos = 0);

khi sử dung thì hàm sẽ tìm ký tự (mảng ký tự, chuỗi), ch kể từ vị trí pos. nếu ko có pos thì giá trị mặc định là 0; và tìm kiếm cho đến cuối

-phương thức thay thế replace

Cấu trúc sử dụng:

str.replace(int pos, int nchar, char *s);
str.replace(int pos, int nchar, string s);
str.replace(int pos, int nchar, int n, char ch);

cách dùng
+dùng thay thế một đoạn con trong chuỗi str cho trước
tính từ vị trí pos và thay thế chon char kí tự, bằng chuỗi con s;
+ cách thứ 3 là thay thế bằng n ký tự ch;
C++ Code:

#include <iostream>
#include <string>
using namespace std;
int main ()
{
       string str = "I LOVE c";
       cout<<str<<endl;
       str.replace(7, 1, 4, 'C');
       str.replace(7, 1, "C")
       cout<<str<<endl;
       system("pause");
       return 0;
}
Comments