#include<iostream>
using namespace std;
const int size=10;
struct str
{
int length;
int time;
int maxsize;
char *a;
};
void initial(str &n);
void input(str &n);
void extend(str &n);
void copy(str &n,str m);
void connect(str &n,str m);
void output(str n);
void sub(str &n,str m);
void length(str &n);
void dele(str &n);
int main()
{
str a,b;
initial(a);
initial(b); //初始化 a,b
input(a); //向 a 中输入字符串
copy(b,a); //将 a 中字符串复制到 b 中
length(b);
connect(b,a); // 将 a 连接到 b的尾部
connect(b,a);
output(a);
output(b);
length(a);
length(b);
dele(a);
dele(b);
}
void initial(str &n)
{
n.time=1;
n.maxsize=size;
n.a=new char[size];
}
void input(str &n)
{
cout<<"输入字符串"<<endl;
char a;
int i=1;
for(;;i++)
{
cin>>a;
if(i>=n.maxsize-1) //大于当前空间则执行扩容
{
extend(n);
}
if(a=='#')
{
cout<<"输入结束"<<endl;
break;
}
else
{
n.a[i]=a;
}
}
n.length=i-1;
}
void extend(str &n) //作用相当于 realloc
{
n.time++;
char *temp=new char[n.time*size];
n.maxsize=(n.time)*size;
for(int i=0;i<=n.length;i++)
{
temp[i]=n.a[i];
}
n.a=temp;
}
void copy(str &n,str m) //把 m 串复制给 n,此处默认 n为空
{
if(m.length>n.maxsize-1)
{
int i=1;
int time=(m.length-n.maxsize)/10+1;
for(;i<=time;i++)
{
extend(n);
}
}
int i=1;
for(;i<=m.length;i++)
{
n.a[i]=m.a[i];
}
n.length=m.length;
}
void connect(str &n,str m) //把 m 接到 n的尾部
{
if((n.length+m.length)>n.maxsize-1) //本来是 -2 ,但是新连接的串没有必要 用空的 [0]位置占地,所以改为-1
{
int t=((n.length+m.length)-n.maxsize+1)/10+1;
for(int i=1;i<=t;i++)
{
extend(n);
}
}
int i=n.length+1;
int o=1;
for(;i<=m.length+n.length;i++) // for(;i<=m.length;i++,o++)
{
n.a[i]=m.a[o];
o++;
}
n.length=m.length+n.length; // n.length=m.length+1;
}
void output(str n)
{
int i=1;
for(;i<=n.length;i++)
{
cout<<n.a[i];
}
cout<<endl;
}
void sub(str &n,str m) //将 m中某子串取出赋值给 n
{
cout<<"请输入从第几个字符开始"<<endl;
int a;
cin>>a;
if(n.maxsize-1<m.length-a)
{
int time=(n.maxsize-1-(m.length-a))/10+1;
for(int i=1;i<=time;i++)
{
extend(n);
}
}
int b=1;
for(;a<=m.length;a++)
{
n.a[b]=m.a[a];
b++;
}
n.length=m.length-a;
}
void length(str &n)
{
cout<<"字符串长为: "<<n.length<<endl;
}
void dele(str &n)
{
delete []n.a;
}
在字符数超过7个之后,再输出就会出现乱码