0
点赞
收藏
分享

微信扫一扫

python爬取QQ音乐评论信息

千妈小语 2024-03-20 阅读 15

字符串函数的模拟实现

char * strcpy(char * cpyStr,const char * str){
     assert((cpyStr != NULL) && (str != NULL));
     
     char * strFirst = cpyStr;
     while(*str != '\0'){
	    *cpyStr = *str;
	    cpyStr++;
	    str++;
	 }

	 *cpyStr = *str;
	 return strFirst;
}
int strlen(const char * str){
	assert(str != NULL); 
	int count = 0;
    while(*str != '\0'){
	   count++;
	   str++;
	}
	return count+1;
}
char * Strcat(char * dest,const char * str){
    assert((dest!= NULL) && (str != NULL));
    
    char * strFirst = dest;
    while(*dest != '\0'){
	   dest++;
	}
	
	while(*str != '\0'){
	   *dest = *str;
	   dest++;
	   str++;
	}
	*dest = *str;
	return strFirst;
}
int Strcmp(const char * dest,const char * str){
	   assert((dest != NULL) && (str!= NULL));
       while(*dest != '\0'&& *str != '\0' && *dest == *str){
	        dest++;
	        str++;
	   }
	   
	   if(int(*dest) - int(*str) == 0){
	       return 0;
	   }else if(int(*dest) - int(*str) > 0){
	   	   return 1;
	   }else{
	        return -1;
	   }
	   
}

字符串类的模拟实现

class String{
	public:
		String():_data(new char[1]){
		     *_data = '\0';
		};
		String(const char * str){
		     if(str == NULL){
		     	_data = new char[1];
		     	*_data = '\0';
			 }else{
			 	int length = strlen(str);
			 	_data = new char[length+1];
			 	strcpy(_data,str);
			 }
		};
		
		String(const String & str){
			int length = strlen(str._data);
			_data = new char[length+1];
			strcpy(_data,str._data);
		}
		
		String(String && str){
				_data = str._data;
				str._data = NULL;
		}
		
		String & operator=(const String & other){
			if(this != &other){
				delete[] _data;
				_data = nullptr;
				int length = strlen(other._data);
				_data = new char[length+1];
				strcpy(_data,other._data);
			}
			return *this;
		}
		
		String & operator=(String && str){
			if(this != &str){
				delete[] _data;
				_data = nullptr;
				_data = str._data;
				str._data = nullptr;
			}
			return *this;
		}
		~String(){};
         		
	private:
		char * _data;
};

对于一个C++的空类来说,编译器会默认创建8个函数:

  1. 无参构造函数
  2. 析构函数
  3. 重载取地址运算符函数(const)
  4. 重载取地址运算符函数(非const)
  5. 拷贝构造函数
  6. 重载赋值运算符函数
  7. 移动拷贝构造函数
  8. 移动赋值运算符函数

移动语义的这几个函数根据C++ Primer的说法,在特定情况下编译器会有默认的实现,也就是没有自定义构造函数、析构函数和拷贝构造函数的时候会自动创建

举报

相关推荐

0 条评论