数据结构之串

串就是字符串的意思,
串(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; }

 

posted @ 2015-01-16 10:46  MR Li C  阅读(315)  评论(0编辑  收藏  举报