////////////////////////////////////////////// //顺序串的初始化,建立,插入,查找,删除。 // //Author:Wang Yong // //Date: 2010.8.21 // ////////////////////////////////////////////// #include <stdio.h> #include <stdlib.h> #define MAX 1024 ////////////////////////////////////////////// //定义顺序串的类型 typedef struct { char ch[MAX]; //存放字符串 int len; //存放串的长度 } SeqString; ////////////////////////////////////////////// //创建顺序串 void StrAssign(SeqString &str,char cstr[]) { int i; for(i = 0 ;cstr[i] != '\0'; i++) str.ch[i] = cstr[i]; str.len = i; } ////////////////////////////////////////////// //顺序串的复制 void StrCopy(SeqString &s,SeqString t) { int i; for(i = 0;i < t.len; i++) s.ch[i] = t.ch[i]; s.len = t.len; } ////////////////////////////////////////////// //求串长的算法 int StrLength(SeqString s) { return s.len; } /////////////////////////////////////////////// //串连接的算法 SeqString StrConcat(SeqString s,SeqString t) { int i; SeqString str; for(i = 0 ;i < s.len ; i++) str.ch[i] = s.ch[i]; for(i = 0 ; i < t.len;i++) str.ch[i+s.len] = t.ch[i]; str.len =s.len + t.len; return str; } /////////////////////////////////////////////// //求子串的算法,返回从第i个字符开始,连续的j个字符组成的子串 SeqString SubString(SeqString s,int i,int j) { SeqString str; int k; if(i < 1 || i > s.len || i+j-1 > s.len) printf("参数错误!\n"); for(k = i-1;k < i+j;k++ ) str.ch[k-i+1] = s.ch[k]; str.len = j; return str; } /////////////////////////////////////////////// //串插入的算法 SeqString InsertString(SeqString &s,int i, SeqString t) { s.len =s.len + t.len; int j; for(j = s.len - 1; j >- i-1; j--) s.ch[j+t.len] = s.ch[j]; i = i - 1; for(j = 0 ; j < t.len; j++) s.ch[i++] = t.ch[j]; return s; } /////////////////////////////////////////////// //删除字串的算法,从s中删除第i个字符开始的长度为j的子串 SeqString DeleteString(SeqString &s,int i, int j) { int k; if(i < 0 || i > s.len || i+j-1 > s.len) printf("参数不正确!\n"); for(k = i-1 ;k <s.len-j;k++) s.ch[k] = s.ch[k+j]; s.len = s.len - j; return s; } /////////////////////////////////////////////////// // 串的输出 void Output(SeqString s) { int i; for(i = 0 ; i < s.len; i++) printf("%c",s.ch[i]); printf("\n"); } int main() { char c[100]; SeqString str; printf("请输入要创建的字符串:"); scanf("%s",c); StrAssign(str,c); Output(str); int i = StrLength(str); printf("字符串的长度为:%d\n",i); printf("要复制的字符串:"); char tempc[100]; SeqString tstr; scanf("%s",tempc); StrAssign(tstr,tempc); StrCopy(str,tstr); Output(str); printf("将两个字符串链接起来:"); StrAssign(str,c); StrAssign(tstr,tempc); SeqString newstr = StrConcat(str,tstr); Output(newstr); SeqString sstr; int j; printf("请输入所要求的子串位置i和长度j:"); scanf("%d %d",&i,&j); sstr = SubString(newstr,i,j); Output(sstr); printf("请输入要插入的字符串:"); scanf("%s",c); StrAssign(str,c); printf("请输入要插入的位置:"); scanf("%d",&i); InsertString(newstr,i,str); Output(newstr); printf("请输入要删除子串的位置和长度:"); scanf("%d %d",&i,&j); DeleteString(newstr,i,j); Output(newstr); return 0; }