#include<iostream>
#include<cstring>
using namespace std;
class String {
private:
char* s;
int len;
public:
String(const char* str) {
len = strlen(str);
s = new char[len+1];
for (int i = 0; i < len; i++) {
s[i] = str[i];
}
s[len]='\0';
}
String() {
s=nullptr;
}
String(const String& a) {
len = a.len;
s = new char[len+1];
for (int i = 0; i <= len; i++) {
s[i] = a.s[i];
}
}
//~String() {
// delete[] s;
//}
void set(char* s); //为该对象赋值
void show(); //显示该对象中保存的字符串
int getlen(); //返回该对象的字符串长度
void dechar(char ch);//在该对象保存的字符串中查找并删除指定的所有字符
String& operator=(const String& p) {
len = p.len;
s = new char[len+1];
for (int i = 0; i < len; i++) {
s[i] = p.s[i];
}
s[len] = '\0';
return *this;
}
//String& operator+=(String& p) {
//char* t = new char[len+1];
//for (int i = 0; i < len; i++)
// t[i] = s[i];
//t[len] = '\0';
//len += p.len;
//delete[] s;
//s = new char[len+1];
//for (int i = 0; i < len-p.len; i++)
// s[i] = t[i];
//delete[] t;
//int j = 0;
//for (int i = len-p.len; i < len; i++) {
// this->s[i] = p.s[j++];
//}
//this->s[len] = '\0';
//return *this;
//}
friend String operator+(String& a, String& b) {
String temp;
temp.len = a.getlen() + b.getlen();
temp.s = new char[temp.len +1];
for (int i = 0; i < a.getlen(); i++) {
temp.s[i] = a.s[i];
}
int i = 0;
for (int j = a.getlen() ; j < temp.len; j++) {
temp.s[j] = b.s[i];
i++;
}
temp.s[temp.len] = '\0';
return temp;
}
int operator==(String& a) {
int flag = 1;
if (len != a.len)
return 0;
for (int i = 0; i < len; i++) {
if (s[i] != a.s[i]) {
flag = 0;
}
}
return flag;
}
};
void String::set(char* sn) {
if (s != nullptr) {
delete[]s;
s = nullptr;
}
len = strlen(sn);
s = new char[len+1];
for (int i = 0; i <=len; i++) {
s[i] = sn[i];
}
}
void String::show() {
cout << s << endl;
}
int String::getlen() {
return len;
}
void String::dechar(char ch) {
int i, j;
i = 0, j = 0;
for (i = 0; i < len; i++) {
if (s[i] != ch) {
s[j++] = s[i];
}
len = j;
s[j] = '\0';
}
}
int main() {
char s1[1000];
char s2[1000];
cin >> s1;
String a(s1);
cin >> s2;
String b(s2);
cout << a.getlen() << endl;
cout << b.getlen() << endl;
//String p;
//p=(a+b);
(a+b).show();
//String p1 ;
//p1 = b+b;
(b+b).show();
if (a == b) {
cout << 1;
}
else
cout << 0;
}
在对字符串进行拓宽操作时
String& operator+=(String& p) {
char* t = new char[len+1];
for (int i = 0; i < len; i++)
t[i] = s[i];
t[len] = '\0';
len += p.len;
delete[] s;
s = new char[len+1];
for (int i = 0; i < len-p.len; i++)
s[i] = t[i];
delete[] t;
int j = 0;
for (int i = len-p.len; i < len; i++) {
this->s[i] = p.s[j++];
}
this->s[len] = '\0';
return *this;
}
先将字符串s拷贝到临时字符串t上,后将s释放,再重新对s new新的足够的空间,重新对s进行操作。
字符串输出乱码的解决:
在字符串的末尾加上 ‘\0’