我想在C++中實現一個基本的string
類。但是,我卡在append()
函數。它希望它是Hello World
,但結果Hello ÍWorlýýýý««««««««þ
:C++字符串執行錯誤
#define __START namespace lib{
#define __END }
__START
class string
{
public:
string(const char* s)
{
_str = s;
}
const char operator[](int position)
{
return _str[position];
}
void operator=(string s)
{
_str = s.c_str();
}
void append(string s)
{
size_t nlength = (length() + s.length());
char* nstr = new char[nlength];
for (int i = 0; i < length(); ++i)
{
nstr[i] = _str[i];
}
for (int i = length() + 1; i < nlength; ++i)
{
nstr[i] = s[(i - length() - 1)];
}
_str = const_cast<const char*>(nstr);
}
void operator+=(string s)
{
append(s);
}
const char* c_str()
{
return _str;
}
size_t length()
{
return strlen(_str);
}
std::string str()
{
return _str;
}
private:
const char* _str;
};
__END
int main()
{
lib::string s = "Hello ";
s.append("World"); // s += "World";
std::cout << s.c_str();
getchar();
}
通過一切手段,爲您的字符串類使用不同的名稱。 'string'與'std :: string'衝突。當然你可以有'yournamespace :: string',但最好避免混淆。 –
@DanielDaranas我會打賭1000美元,OP是'使用命名空間標準;'無論如何。 – 2014-01-28 18:05:47
您需要分配nlength + 1,然後將'\ 0'添加到字符串末尾 –