Cài đặt lớp Mystring giống với lớp std::string

#include <iostream>
#include<stdio.h>
#include<vector>
using namespace std;
class String
{
private:
	vector<char> s;
	int len;
public:
String String::substr(int pos, int nchar)const
{
	String tach(nchar);
	for (int i = pos; i <= (pos+nchar); i++)
	{
			tach.s[i-pos] = this->s[i];
	}
	return tach;
}

Vì sao khi em cho s là const char* thì hàm substr chạy bình thường mà nếu s là vector như trên thì bị lỗi ạ??

từ i = pos tới i <= pos+nchar có mấy ký tự? :V

ví dụ đoạn [5, 5+9] bao gồm cả số 5 và 14 có mấy số nguyên? Có 9 hay 10 số nguyên?

4 Likes

vâng đúng là em chỗ đó nên sửa lại là i<(pos+nchar) nhưng vì sao chỉ trog TH s là vector mới báo lỗi ạ? nếu em để s là kiểu char* thì vẫn chạy được ??

std::vector có kiểm soát khi gán còn char* là primitive.

Mà sao bạn ko dùng s.size() luôn?

3 Likes

vâng. em cảm ơn. cái này là để tách chuỗi con từ vị trí pos, lấy nchar kí tự. nên sao dùng s.size() đc ạ

std::vector có sẵn .size() để lấy độ dài rồi.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?