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

Đề tài: String và vector

  1. #1
    Ngày gia nhập
    04 2009
    Bài viết
    4

    Mặc định String và vector

    Em có đoạn code như sau:
    Code:
    #include <string>
    #include <vector>
    #include <iostream>
    
    using namespace std;
    
    void main()
    {
    	vector<string> v;
    	string s;
    	s = "Nguyen Van A";
    	int k = 0;
    	int iLength = s.length();
    	for (int i = 0; i < iLength; i++)
    		v[k] = v[k] + s[i]; // C++ bao loi dong nay khi chay debug
    }
    Các anh cho em hỏi là tại sao dòng đó lại sai ? Mỗi phần tử của v là 1 string vậy thì nó vẫn có thể sử dụng toán tử = và + của string chứ ?
    Còn 1 vấn đề nữa, lại có đoạn code sau :
    Code:
    	iSoHocSinh = k; // k da biet truoc
    	for (int i = 0; i < iSoHocSinh; i++)
    		hs[i].Nhap(v[i]);
    Phương thức Nhập được định nghĩa trong class HocSinh như sau :
    Code:
    void HocSinh::Nhap(string s)
    {
    	int iLength = s.length();
    	int i = 0;
    	for (i; i < iLength; i++)
    	{
    		if (s[i] == '\n')
    		{
    			iDiemToan = s[i - 2] - 48;
    			iDiemVan = s[i - 1] - 48;
    			for (int j = i - 3; j >= 0; j--)
    				sHoTen = sHoTen + s[j];
    			char tam;
    			int k = sHoTen.length() - 1;
    			for (int t = 0; t <= k; t++, k--)
    				{
    					tam = sHoTen[k];
    					sHoTen[k] = sHoTen[t];
    					sHoTen[t] = tam;
    				}
    			break;
    		}
    	}
    }
    Tại sao khi em chạy debug, tới dòng đối tượng hs[i] gọi thực hiện phương thức Nhap với đối số là chuỗi v[i] (hs là 1 vector<HocSinh>, v là vector<string>) thì chương trình lại nhảy vào đây :
    Code:
    	__CLR_OR_THIS_CALL basic_string(const _Myt& _Right)
    		: _Mybase(_Right._Alval)
    		{	// construct by copying _Right
    		_Tidy();
    		assign(_Right, 0, npos);
    		}
    Mong các anh giúp cho, em xin cám ơn trước.
    Đã được chỉnh sửa lần cuối bởi badboy130690 : 22-04-2009 lúc 10:02 AM.

  2. #2
    Ngày gia nhập
    04 2009
    Nơi ở
    một căn hộ nhỏ trên trái đất
    Bài viết
    372

    Code:
    #include <string>
    #include <vector>
    #include <iostream>
    
    using namespace std;
    
    void main()
    {
    	vector<string> v;
    	string s;
    	s = "Nguyen Van A";
    	int k = 0;
    	int iLength = s.length();
    	for (int i = 0; i < iLength; i++)
    		v[k] = v[k] + s[i]; // C++ bao loi dong nay khi chay debug
    }
    Bạn chú ý dòng v[k] = v[k] + s[i], bạn mới khai báo v với độ dài vector là rỗng. Và thành phần string trong đó chưa hề có giá trị khởi tạo, vậy thì không thể thực hiện được phép toán trên.

  3. #3
    Ngày gia nhập
    04 2009
    Bài viết
    4

    Àh rồi, cảm ơn bro rất nhiều, còn vấn đề dưới bro giải thích dùm mình luôn được ko ? Tại sao khi đối tượng hs[i] gọi thực hiện phương thức Nhap với đối số là chuỗi v[i] thì trình biên dịch lại nhảy vào đoạn code trên kia ?

  4. #4
    Ngày gia nhập
    04 2009
    Nơi ở
    một căn hộ nhỏ trên trái đất
    Bài viết
    372

    Trích dẫn Nguyên bản được gửi bởi badboy130690 Xem bài viết
    Àh rồi, cảm ơn bro rất nhiều, còn vấn đề dưới bro giải thích dùm mình luôn được ko ? Tại sao khi đối tượng hs[i] gọi thực hiện phương thức Nhap với đối số là chuỗi v[i] thì trình biên dịch lại nhảy vào đoạn code trên kia ?
    Đó là phương thức được định nghĩa trong đối tượng string. Khi bạn dùng toán tử = (phép gán) thì toán tử này được overload (tạm hiểu là định nghĩa nhiều lần) để chạy một hàm ẩn đằng sau có tác dụng gán giá trị cho đối tượng string. Bạn cần đọc thêm những tài liệu về class, object trong C++, operator overloading sẽ hiểu hơn thôi.
    Còn vấn đề bạn debug, như đã nói, bạn dùng toán tử gán sẽ chạy hàm ẩn, khi đặt điểm ngắt (break point) đến dòng này và bấm Step Into thì nó sẽ vào hàm hay khi bạn không đặt điểm ngắt nhưng việc chạy hàm ẩn đó bị lỗi tại đâu thì chương trình sẽ đặt điểm ngắt tại đó.

  5. #5
    Ngày gia nhập
    04 2009
    Bài viết
    4

    Bro có thể cho mình xin nick Y!M để hỏi kỹ hơn ko ? Thú thật mình còn yếu phần vector này lắm.
    Đoạn code trên mình đã sửa lại như sau:
    Code:
    	iSoHocSinh = k;
    	hs.resize(iSoHocSinh);
    	for (int i = 0; i < iSoHocSinh; i++)
    		hs[i].Nhap(v[i]);
    Bây giờ khi debug nó ko nhảy vào dòng code kia nữa mà nhảy vào dòng này:
    Code:
    	reference operator[](size_type _Pos)
    		{	// subscript mutable sequence
    Cái mình ko hiểu là tại sao hs[i] là 1 đối tượng HocSinh, khi gọi phương thức Nhap với đối số là chuỗi v[i] lại ko nhảy vào phương thức Nhap đã được định nghĩa trong lớp HocSinh ?

  6. #6
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Mặc định String và vector

    Post toàn bộ code lên đi cậu. Mà cậu dùng VC++ à ?

  7. #7
    Ngày gia nhập
    04 2009
    Bài viết
    4

    Đã làm được rồi, thanks anh em nhìu lắm. Có gì mình lên học hỏi tiếp.
    Đã được chỉnh sửa lần cuối bởi badboy130690 : 22-04-2009 lúc 12:15 PM.

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

  1. lỗi no matching function for call to `vector::vector(vector)'
    Gửi bởi ngonchanloi89 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 10-11-2013, 11:25 AM
  2. Mã nguồn C Lỗi cách nhập vector<vector<string>>
    Gửi bởi trionlinestudy trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 10-03-2013, 10:39 PM
  3. Câu hỏi về lớp string và vector...!!!
    Gửi bởi flylover trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 01-04-2009, 07:54 PM
  4. [ Solved ]Hỏi String ,vector and...
    Gửi bởi thanhnh trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 17-11-2008, 07:55 AM
  5. vector<string>
    Gửi bởi ntt trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 6
    Bài viết cuối: 29-10-2008, 08:17 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