串就是字符串的意思,
串(string)是由零个或多个字符组成的有限序列,
又名叫字符串,
那么定长串顾名思义就是对固定长度的字符串进行操作。
定长串的操作同字符串一样,
只是应该注意串长,
防止越界访问导致莫名其妙的错误。
#include <iostream>
using namespace std;
#define MaxStrSize 256
typedef struct mystring
{
char str[MaxStrSize];
int len;
} MyString;
//求串的长度
int StrLength(MyString &S)
{
int i=0;
while(S.str[i]!='\0')
i++;
S.len=i;
return S.len;
}
//打印串
void StrPrint(MyString &S)
{
if(S.len<=0)
{
cout<<"空串!"<<endl;
}
else
{
for(int i=0; i<S.len; i++)
cout<<S.str[i];
cout<<endl;
}
}
//串复制
void StrCopy(MyString &to,MyString &from)
{
int i;
for(i=0; i<from.len; i++)
{
to.str[i] = from.str[i];
}
to.len = from.len;
to.str[to.len] = '\0';
}
//串连接
void Strcat(MyString &to,MyString &from)
{
int i;
for(i=0; i<from.len; i++)
{
to.str[to.len+i] = from.str[i];
}
to.len=to.len+from.len;
to.str[to.len] = '\0';
}
//串比较
int strcmp(MyString &s1,MyString &s2)
{
int i;
for(i=0; i<=s1.len; i++)
{
if(s1.str[i]!=s2.str[i])
return s1.str[i]-s2.str[i];
}
return 0;
}
//字符定位
void StrLocate(MyString &s1,char c)
{
int i;
for(i=0; i<s1.len; i++)
{
if(s1.str[i]==c)
{
cout<<"位置:"<<i<<endl;
break;
}
}
if(i==s1.len)
cout<<"未找到!"<<endl;
}
//求s中从第index个字符开始长度为len的子串
MyString StrSub(MyString &s, int index, int len)
{
MyString temp;
temp.len=0;
if(index+len>s.len)
{
cout<<"提取的子串过长!"<<endl;
}
else
{
int i;
for(i=0; i<len; i++)
temp.str[i]=s.str[index-1+i];
temp.len=len;
temp.str[temp.len] = '\0';
}
for(int i=0;i<len;i++)
{
cout<<temp.str[i];
}
cout<<endl;
}
void create(MyString &s,int n)
{
s.len=n;
int i;
for(i=0; i<n; i++)
{
cin>>s.str[i];
}
}
//删除s中从第index个字符开始长度为len的子串
void StrDel(MyString &s, int index, int len)
{
int i;
if(index+len>s.len)
s.len=index;
else
{
for(i=index+len; i<s.len; i++)
s.str[i-len]=s.str[i];
s.len=s.len-len;
}
s.str[s.len]='\0';
}
//向串s中第index个位置插入串t
void StrInsert(MyString &s, int index, MyString &t)
{
if(index>s.len)
cout<<"插入位置不对!"<<endl;
else
{
int i,j=1;
for(i=s.len+t.len-1; i>=index+t.len; i--)
{
s.str[i]=s.str[s.len-j];
j++;
}
for(i=0; i<t.len; i++)
{
s.str[index+i]=t.str[i];
}
s.len=s.len+t.len;
s.str[s.len]='\0';
}
}
//s串中从第 index 个字符开始的 len 个连续字符将被 t 替换
void StrRep(MyString &s, int index, int len, MyString &t)
{
int i;
for(i=0; i<len; i++)
s.str[index+i]=t.str[i];
s.len=(index+i)>s.len ? (index+i) : s.len;
s.str[s.len]='\0';
}
int main()
{
int n;
while(cin>>n)
{
MyString a,b;
create(a,n);
create(b,n);
// cout<<strcmp(a,b)<<endl;
StrInsert(a,2,b);
//StrCopy(b,a);
// StrPrint(b);
//Strcat(a,b);
StrPrint(a);
}
return 0;
}