Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Sự khác nhau giữa 2 cách khởi tạo chuỗi trong C++?

  1. #1
    Ngày gia nhập
    03 2011
    Bài viết
    44

    Mặc định Sự khác nhau giữa 2 cách khởi tạo chuỗi trong C++?

    Chào mọi người, mình có vấn đề này muốn trao đổi thêm với mọi người.
    Khi khởi tạo chuỗi thì mình khởi tạo:
    Code:
     
    string s = "abc"; 
    cout<<s<<endl;
    thì được.
    Còn khi khởi tạo như thế này:
    Code:
    string s;
    s[0] = 'a'; s[0] = 'a'; s[1] = 'b'; s[2] = 'c'; s[3] = '\0';
    cout<<s<<endl;
    Thì không được. Mong mọi người có thể nói rõ chỗ này giúp mình tí.
    Xin cảm ơn.

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

    s[0] , s[1] .. thực chất là s.operator[](0), .. là những lời gọi để truy nhập vào mảng động lưu dữ liệu về chuỗi của đối tượng string. Vì bạn chỉ mới khai báo string mà chưa cấp phát bộ nhớ cho nó nên s[0], s[1] ... chưa tồn tại.
    Để cấp phát kích thước cho string thì dùng hàm resize:
    C++ Code:
    1. s.resize(3);

    Nếu không muốn bận tâm đến vấn đề cấp phát bộ nhớ thì dùng hàm append (hoặc operator+=)
    C++ Code:
    1. (s+='a')+='b';

  3. #3
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    string là class của c++, ko phải là kiểu mảng char. Nó ko hỗ trợ ghi vào từng phần tử trong chuỗi. Bạn muốn dùng cách 2 thì phải sửa thành : s += 'a'; s += 'b'; s += 'c';

    Hoặc nếu bạn muốn giữ nguyên code cách 2 thì phải khai báo là char s[4]
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  4. #4
    Ngày gia nhập
    03 2011
    Bài viết
    44

    Mặc định Cảm ơn mọi người,

    Cảm ơn mọi người đã chia sẻ.

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

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    string là class của c++, ko phải là kiểu mảng char. Nó ko hỗ trợ ghi vào từng phần tử trong chuỗi. Bạn muốn dùng cách 2 thì phải sửa thành : s += 'a'; s += 'b'; s += 'c';

    Hoặc nếu bạn muốn giữ nguyên code cách 2 thì phải khai báo là char s[4]
    Trong class std::basic_string có chồng toán tử operator[](size_type), trả về là reference nếu đối tượng string đó không phải const, cho nên vẫn có thể ghi theo kiểu s[0] được.
    http://en.cppreference.com/w/cpp/str...ng/operator_at

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

  1. Lệnh so sánh 2 chuổi giống nhau trong C# như thế nào?
    Gửi bởi taka_12x trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 12
    Bài viết cuối: 03-10-2013, 07:40 PM
  2. Bài tập C++ Cách để so sánh 2 chuỗi kí tự giữa chuỗi nhập từ phím và chuỗi từ file xem có giống nhau không?
    Gửi bởi davilson18 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 09-06-2012, 09:47 AM
  3. Tạo 2 chuỗi random khác nhau trong ASP.NET
    Gửi bởi luxubu trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 15-04-2012, 04:04 PM
  4. So Sánh 2 Chuỗi Trong 2 Textbox có độ dài ký tự khác nhau!
    Gửi bởi phanthuonghoai trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 04-06-2011, 08:17 PM
  5. Help! Bài tập đếm số chữ cái khác nhau có trong chuỗi!
    Gửi bởi camping29 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 25-08-2008, 10:24 PM

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