Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 17 kết quả

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

  1. #1
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

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

    Hôm trước mình có làm một bài liên quan đến xâu ký tự nhưng phải dùng mảng kí tự để xử lý xâu. Thầy bảo nếu dùng mảng thì làm sẽ khó + phức tạp hơn dùng kiểu string (tức là string variable). Chính vì điều này mà mình bắt tay vào điều tra xem string là j. Nhưng rất tiếc là mình ko tìm thấy mấy tài liệu tiếng việt nói về kiểu dữ liệu này.
    Tiếng anh thì mình nhận mình ngu rồi. kiểm tra các thứ.. thì đc có toàn 7^^. Nên rất ngại đọc tiếng anh … Nhưng lần này quyết tâm chơi cả hàng nội lẫn hàng ngoại….^^!~
    Đọc tiếng anh + tiếng việt
    Viết tut đầu tiên có sai sót mong mọi người góp ý~!

    -Bàn về hạn chế của mảng kí tự: khi học C chắc chắn bạn sẽ phải học về cái này. Để xử lý một xâu bạn phải sử dụng tới mảng ký tự kèm theo thư viện string.h. Các thao tác xử lý hết sức phức tạp. Nếu bạn dùng tới con trỏ lưu xâu thì rất phức tạp kèm theo lỗi phát sinh trong quá trình.(kết thúc của mảng kí tự là kí tự ‘\0’)
    -> bạn phải chủ động kiểm soát bộ nhớ khi cấp phát. Và am hiểu các kỹ thuật về con trỏ….
    Với mảng kí tự bạn ko thể thực hiện các phép gán hay phép + (nối xâu) hay phép so sánh…. Mà phải sử dụng các hàm strcmp, strcpy, strcat… trong thư viện string.h để gán, hay ghép……..


    OO: 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:
    1. #include<iostream>
    2. #include<string>
    3.  
    4. using namespace std;
    5.  
    6. int main()
    7. {
    8.        string fname = "Hung", mname= "Khac", sname= "Nguyen", Fname;
    9.        string space = " ";
    10.        Fname = sname+space+mname+space+fname;
    11.        cout<<Fname<<endl;
    12.        system("pause");
    13.        return 0;
    14. }

    C++ Code:
    1. #include<iostream>
    2. #include<string>
    3.  
    4. using namespace std;
    5.  
    6. int main()
    7. {
    8.        string name[]= {"Hung", "Khac", "Nguyen"};
    9.        string Fname, space = " ";
    10.        int n=sizeof(name)/sizeof(string);
    11.        for(int i=n-1; i>=0;i--){
    12.               Fname+=name[i]+space;
    13.        }
    14.        cout<<Fname<<endl;
    15.        system("pause");
    16.        return 0;
    17. }

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

    C++ Code:
    1. #include<iostream>
    2. #include<string>
    3.  
    4. using namespace std;
    5. void swap(string *a, string *b);
    6. int main()
    7. {
    8.        string name[]= {"Hung", "Khac", "ANguyen"};
    9.        string Fname, space = " ";
    10.        int n=sizeof(name)/sizeof(string);
    11.        for(int i=0; i<n;i++){
    12.               for(int j=i+1; j<n; j++){
    13.                      if(name[i]>name[j])
    14.                             swap(&name[i], &name[j]);
    15.               }
    16.        }
    17.        for(int i=0; i<n; i++){
    18.               cout<<name[i]+ space;
    19.        }
    20.        cout<<Fname<<endl;
    21.        system("pause");
    22.        return 0;
    23. }
    24. void swap(string *a, string *b){
    25.        string tam;
    26.        tam=*a;
    27.        *a=*b;
    28.        *b=tam;
    29. }

    ---- 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:
    1. #include<iostream>
    2. #include<string>
    3.  
    4. using namespace std;
    5. void swap(string *a, string *b);
    6. int main()
    7. {
    8.        char x[]= "Nguyen Khac Hung";
    9.        string name = "xyz";
    10.        cout<<name<<endl;
    11.        name=x;
    12.        cout<<name.length()<<"  : "<<name<<endl;
    13.        system("pause");
    14.        return 0;
    15. }
    String thực chất là một vector<char>(phần này chưa đọc nên chưa dám viết^^)
    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:
    1. // getline with strings
    2. #include <iostream>
    3. #include <string>
    4. using namespace std;
    5. int main ()
    6. {
    7. string str;
    8. short age;
    9. cout << "Please enter full name and age"<< endl;
    10. getline( cin, str) >> age;
    11. cout << "Thank you " << str << "!\n";
    12. return 0;
    13. }

    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:
    1. // substr(,)with string
    2. #include <iostream>
    3. #include <string>
    4. using namespace std;
    5. int main ()
    6. {
    7.        string str="Nguyen Khac Hung";
    8.        cout<<"Ten ban: "<<str<<endl;
    9.        cout << "Thank you " << str.substr(12,4) << "!\n";
    10.        system("pause");
    11.        return 0;
    12. }

    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:
    1. #include <iostream>
    2. #include <string>
    3. using namespace std;
    4. int main ()
    5. {
    6.        string str="Nguyen Hung";
    7.        string mname= " khac";
    8.        str.insert(6, mname);
    9.        cout<<"Ten ban: "<< str.substr(12, 4)<<endl<< str<< endl;
    10.        cout << "Thank you " << str << "!\n";
    11.        system("pause");
    12.        return 0;
    13. }
    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:
    1. #include <iostream>
    2. #include <string>
    3. using namespace std;
    4. int main ()
    5. {
    6.        string str="Nguyen Hung";
    7.        string mname= " khac";
    8.        str.insert(6, mname);
    9.        cout<<"Ten ban: "<< str.substr(12, 4)<<endl<< str<< endl;
    10.        cout << "Thank you " << str.erase(0,12) << "!\n";
    11.        system("pause");
    12.        return 0;
    13. }

    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:
    1. #include <iostream>
    2. #include <string>
    3. using namespace std;
    4. int main ()
    5. {
    6. string str1 ("green apple");
    7. string str2 ("red apple");
    8. if(str1.compare(str2)!=0)
    9. cout<<"it is not the same"<<endl;
    10. if(str1.compare(6, 5, str2, 4, 6)==0){
    11. cout<<"it is apple"<<endl;}
    12. system("pause");
    13. return 0;
    14. }
    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:
    1. #include <iostream>
    2. #include <string>
    3. using namespace std;
    4. int main ()
    5. {
    6.        string str = "I LOVE c";
    7.        cout<<str<<endl;
    8.        str.replace(7, 1, 4, 'C');
    9.        str.replace(7, 1, "C")
    10.        cout<<str<<endl;
    11.        system("pause");
    12.        return 0;
    13. }

    6) Tách xâu.

    Ps: Sau khi thức tới hơn 5h30 sáng mới hoàn thành. Mình mong tác phẩm này đc mọi người ủng hộ. bác nào thấy hay, có ích với mình thì thanks ủng hộ e cái nha
    Hướng dẫn C++: https://nhacuaens.wordpress.com/2019/04/21/bai-1-bat-dau-voi-c/

  2. #2
    Ngày gia nhập
    04 2011
    Bài viết
    79

    trời ạ sao lại nghĩ vậy , rất nhiều ng cần mà , tớ cũng cần đây , thank cái cho chủ topic lấy lại tinh thần !
    http://http://www.matcuoi.com/smilies/7onion68.gif"]http://http://www.matcuoi.com/smilies/7onion68.gif

  3. #3
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Trích dẫn Nguyên bản được gửi bởi Kudo_Conan Xem bài viết
    trời ạ sao lại nghĩ vậy , rất nhiều ng cần mà , tớ cũng cần đây , thank cái cho chủ topic lấy lại tinh thần !
    tại tớ ko thấy tài liệu tiếng việt đâu nên sẵn mình học thì mình viết lun 1 bài tut. hic
    ngẫm thấy là các chương trình toàn dùng mảng ký tự mình thấy hơi thắc mắc.
    + sách tham khảo toàn viết về array character.
    ??.
    mình thấy string var rất tiện mà sao ít đc dùng nhỉ
    <strc nay mình cũng toàn dùng array character>
    Hướng dẫn C++: https://nhacuaens.wordpress.com/2019/04/21/bai-1-bat-dau-voi-c/

  4. #4
    Ngày gia nhập
    11 2010
    Nơi ở
    Black Hole
    Bài viết
    824

    class string trong C++ thì mạnh rồi tại bạn ít dùng thôi và trên forum người ta thường giải thích bằng code C hơn là code C++.

    Mình thì ko hiểu nhiều về C++ nhưng mình nghĩ nếu có 1 cái class string như java thì sướng rồi.

    Cố lên. 2 năm nữa xuất bản sách nhớ tặng mình 1 cuốn nhé

  5. #5
    Ngày gia nhập
    02 2011
    Nơi ở
    hà nội
    Bài viết
    131

    cám ơn bài viết. bài viết của bạn rất hay và hữu ích mà^^~!~
    nếu bạn viết sách thì khi nào hoàn thành mình cũng muốn xin 1 quyển. hihi
    hehe
    Chia tay bình minh

  6. #6
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

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

    @anh cà rem vs @chi..: Cám ơn mọi người đã ủng hộ mình
    mà mình thì đâu đủ khả năg để viết sách hihi
    à. mà cứ yên tâm là tới mùa quýt mình sẽ viết xong
    Hướng dẫn C++: https://nhacuaens.wordpress.com/2019/04/21/bai-1-bat-dau-voi-c/

  7. #7
    Ngày gia nhập
    12 2009
    Nơi ở
    The country of happiness
    Bài viết
    182

    sử dụng string class rất tiện lợi trong các contest. Và nếu bạn học theo trình tự C -> C++ -> java thì việc đọc về class string trong C++ sẽ giúp bạn tiếp cận tự nhiên với String trong java.
    Trích dẫn Nguyên bản được gửi bởi Wazi Armstrong Xem bài viết
    Ôi skill của mình đã đạt đến hàng tuyệt đỉnh
    Không chỉ ăn, tắm, đi lại có thể code
    Mà giờ đã mình có thể code cả khi ngủ. Code tạm vào buffer của não, lúc nào dậy chỉ việc viết ra một cách trôi chảy không lưỡng lự.
    PS: Nếu ngủ dài rảnh rảnh có thể debug luôn, dậy chỉ việc build ?
    Trích dẫn Nguyên bản được gửi bởi vietanh8286 Xem bài viết
    Lập trình viên giỏi là lập trình viên có vợ

  8. #8
    Ngày gia nhập
    02 2012
    Nơi ở
    Thủ Đức
    Bài viết
    19

    Hjx.mình cũng đang nghiên cứu về thằng khỉ này.lúc đầu mình nhập bằng cin >> str; ko có đc nên bực quyết định đi tìm hiểu về nó.may mà có bài bác nhỉ.thank rất nhìu về 1 bài viết có ích

  9. #9
    Ngày gia nhập
    11 2010
    Bài viết
    18

    Cảm ơn bạn về tài liệu này ! nhưng cho mình hỏi sự khác nhau giữa cin.getline và getline được ko bạn ? mình vẫn chưa hiểu về điều này

  10. #10
    Ngày gia nhập
    03 2013
    Bài viết
    2

    getline là một hàm độc lập, được khai ở trong <string>, hay nói cách khác, là được getline sẽ làm việc trên 1 string, nên muốn dùng hàm getline, thì bạn phải khai báo #include<string> ở đầu.

    C++ Code:
    1. #include<iostream>
    2. #include<string>
    3.  
    4. using namespace std;
    5.  
    6. int main()
    7. {
    8.     string name;
    9.     cout << "name: ";
    10.     getline(cin, name);
    11.     cout << name << endl;
    12.     return 0;
    13. }

    cin.getline là một member ở trong istream, và cách bạn làm việc với nó như kiểu làm việc với string trong C, aka làm việc trên mảng.

    C++ Code:
    1. #include<iostream>
    2.  
    3. using namespace std;
    4.  
    5. int main()
    6. {
    7.     char name[255];
    8.     cout << "Enter a string: ";
    9.     cin.getline(name, 255);
    10.  
    11.     cout << "You typed " << name << endl;
    12. }

    Ở cả 2 cách trên thì đều cho ra một kết quả, nhưng bản thân mình thích làm việc với <string> hơn là bên C style.

Các đề tài tương tự

  1. làm thế nào chuyển String o[] sang String hoặc byte[].
    Gửi bởi zzvanquyenzz trong diễn đàn Thắc mắc lập trình Java
    Trả lời: 1
    Bài viết cuối: 17-06-2013, 09:24 AM
  2. Method String.CompareTo(string strB) trong C# thực hiện so sánh 2 chuỗi như thế nào?
    Gửi bởi tpqnnd trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 27-05-2012, 10:52 AM
  3. Bài tập C++ tạo toán tử ==trong lớp string với tham số là string, char
    Gửi bởi truonglong99 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 24-10-2011, 08:56 AM
  4. Lập trình C++ sử dụng string trong C++. Lỗi C2146: syntax error : missing ';' before identifier tại string string_rep()const;?
    Gửi bởi levanvuonglvv trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 15-09-2011, 10:28 PM
  5. string và String khác nhau như thế nào?
    Gửi bởi mitsumi82 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 22
    Bài viết cuối: 25-12-2009, 11:50 PM

Tags của đề tài này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn