#include <stdio.h> #include <stdlib.h> #define Num 255 typedef struct String { char ch[Num]; int len; }String; void StrAssign(String *T,char *s) { int i=0; while(s[i]!=' ') { T->ch[i]=s[i]; i++; } T->ch[i]=' '; T->len=i; } int StrLength(String T) { int i=0; while(T.ch[i]!=' ') i++; T.len=i; return i; } void StrCopy(String *T,String *S) { int i=0; while(S->ch[i]!=' ') {T->ch[i]=S->ch[i];i++;} T->ch[i]=' '; T->len=i; } void ClearString(String *T) { int i=0; T->len=0; while(T->ch[i]!=' ') T->ch[i++]=' '; } void Concat(String *T,String *S,String *M) { int i,j; for(i=0;i<S->len;i++) T->ch[i]=S->ch[i]; for(j=0;j<=M->len;j++) T->ch[i+j]=M->ch[j]; } int SubString(String *sub,String *S,int pos,int len) { if((pos<1||pos>S->len)&&(len<0||len+pos-1>S->len)) return -1; int i; for(i=0;i<len;i++) sub->ch[i]=S->ch[pos+i-1]; sub->ch[i]=' '; return 1; } int Index(String *S,String *T,int pos) { int i=pos-1,j=0; while(i<S->len&&j<T->len) { if(S->ch[i]==T->ch[j]){ i++;j++; } else { i=i-j+1;j=0; } } if(j>=T->len) return i-j; return -1; } int main() { String T,M,S,N; char *p="wqhsucclipingwangzijian"; char *q="lipingwang"; printf("串的基本操作: "); StrAssign(&T,p); printf("1 串的常量复制 T=%s ",T.ch); StrCopy(&M,&T); printf("2 串的复制 M=%s ",M.ch); StrAssign(&S,q); printf("3 串的常量复制 S=%s ",S.ch); printf("4 串的匹配 Index(M,S,3)=%d ",Index(&M,&S,3)); Concat(&M,&T,&S); printf("5 串T的长度=%d ",StrLength(T)); SubString(&N,&M,5,6); printf("6 串的链接SubString(N,M,5,6)=%s ",N.ch); ClearString(&M); ClearString(&T); ClearString(&N); printf("7 串已置空! "); printf("8 串的操作结束! "); return 0; }