【发布时间】:2020-07-20 05:52:52
【问题描述】:
我正在尝试实现一个String 类,但我发现我的append() 方法有一个错误。你能告诉我我做错了什么吗?我不允许使用任何标准库功能。我刚刚在打印输出中添加了<iostream>,以便查看答案。
这里是append():
void append(const String& s){
char* temp;
temp = new char[len+s.len];
for(int i = 0; i < len; i++){
temp[i] = str[i];
}
for(int i = 0; i < s.len; i++){
temp[len + 1] = s.str[i];
}
str = temp;
}
这是我的完整代码:
#include <iostream>
using namespace std;
class String{
public:
char* str = nullptr;
unsigned int len = 0;
String() = default;
String(const char* chars){
if(chars){
unsigned int i = 0;
while(chars[i]){
i++;
}
len = i;
str = new char[len];
for(int j = 0; j < len; j++){
str[j] = chars[j];
}
}
};
String(const String& s){
if(!s.isEmpty()){
len = s.len;
str = new char[len];
for(int i = 0; i < len; i++){
str[i] = s.str[i];
}
}
};
~String() noexcept{
delete[] str;
};
String& operator=(const String &s) {
if (&s != this) {
String tmp(s);
char *tmpstr = tmp.str;
unsigned int tmplen = tmp.len;
tmp.str = str;
tmp.len = len;
str = tmpstr;
len = tmplen;
}
return *this;
}
void append(const String& s){
char* temp;
temp = new char[len+s.len];
for(int i = 0; i < len; i++){
temp[i] = str[i];
}
for(int i = 0; i < s.len; i++){
temp[len + 1] = s.str[i];
}
str = temp;
}
bool isEmpty() const noexcept{
return(len == 0);
}
unsigned int length() const noexcept{
return len;
}
bool contains(const String& substring) const noexcept{
if(find(substring)){
return true;
}
return false;
}
int find(const String& substring) const noexcept{
for(int i = 0; i < len - substring.len + 1; i++){
if(str[i] == substring.str[0]){
for(int j = 1; j < substring.len;){
if(str[i + j] == substring.str[j]){
j++;
if(j == substring.len){
return i;
}
}
else{
break;
}
}
}
}
return -1;
}
const char* toChars() const noexcept{
char* temp = new char[len + 1];
for(unsigned int c = 0; c < len; ++c) {
temp[c] = str[c];
}
temp[len] = '\0';
return temp;
}
};
int main()
{
const char* chars = "Boo is snoring1";
const char* morechars = " and running";
String s(chars);
String more(morechars);
s.append(more);
cout << s.str << endl;
return 0;
}
【问题讨论】:
-
究竟是什么错误?