码迷,mamicode.com
首页 > 编程语言 > 详细

String的c语言实现

时间:2015-06-14 00:35:54      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:c语言   string   

#include<stdio.h>

#include<stdlib.h>

#define MAXSTRSIZE 255

typedef unsigned char SString[MAXSTRSIZE+2];//0号单元存放串长度,最后一个单元 存放‘\0‘

typedef int Status;

Status StrAssign(SString &T,char *chars){

int i;

for(i=0;chars[i]!=‘\0‘;i++) T[i+1]=chars[i];

T[i+1]=‘\0‘; T[0]=(char) i;

return 1;

}


Status StrCopy(SString &T,SString S){

int i;

for(i=1;S[i];i++) T[i]=S[i];

T[i]=‘\0‘; T[0]=S[0];

return 1;

}


Status IsStrEmpty(SString S){

if(!(S[0])) return 1;

return 0;

}


Status StrLength(SString T){

return T[0];

}

//相同返回1,不同返回0

Status StringCompare(SString S,SString T){

if(T[0]!=S[0]) return 0;

for(int i=1;i<S[0];i++){

if(T[i]!=S[i]) return 0;

}

return 1;

}


Status ClearString(SString &T){

for(int i=1;i<T[0]+1;i++) T[i]=‘\0‘;

T[0]=0;

return 1;

}


Status Concat(SString &T,SString S1,SString S2){

int i;

if(S1[0]+S2[1]<=MAXSTRSIZE){

for(i=1;S1[i];i++) T[i]=S1[i];

for(;S2[i];i++) T[i]=S2[i];

}

else if(S1[0]<MAXSTRSIZE){

for(i=1;S1[i];i++) T[i]=S1[i];

for(;i<=MAXSTRSIZE;i++) T[i]=S2[i];

T[i]=‘\0‘;T[0]=MAXSTRSIZE;

}

else {

for(i=1;i<=MAXSTRSIZE;i++) T[i]=S1[i];

T[i]=‘\0‘; T[0]=S1[0];

}

return 1;

}


Status SubString(SString &Sub,SString S,int pos,int len){

if(pos<1||pos>StrLength(S)||len<0||len>(StrLength(S)-pos+1)) return 0;

int i;

for(i=pos;i<=pos+len;i++) Sub[i]=S[i];

Sub[0]=len;Sub[i]=‘\0‘;

return 1;

}


Status printString(SString S){

if(!S[0]) return 0;

for(int i=1;i<=S[0];i++) printf("%c",S[i]);

return 1;

}


//若主串S中存在和串T值相同的子串,则返回它在主串S中第pos个字符之后第一次出现的位置,否则函数值为0

Status Index(SString S,SString T,int pos){

if(T[0]==0||pos<1||pos>StrLength(S)) return 0;

int n=StrLength(S),m=StrLength(T),i=pos;

SString sub;

while(i<=n-m+1){

SubString(sub,S,i,m);

if(!StringCompare(sub,T)) i++;

else return i;

}

return 0;

}


int main(){

SString t,s;

char ss[10]={"asdsa"};

StrAssign(s,ss);

StrCopy(t,s);

StrAssign(t,"asdsa");

if(IsStrEmpty(t)) printf("EMPTY\n");

if(StringCompare(t,s)) printf("same\n");

printf("%s\n",t);

printf("%d\n",StrLength(t));

printString(s);

printf("\n");

return 0;

}

其实前面长度不用设成MAXSIZE加2的,最后一位用于加\0其实完全没必要,反正输出用printstr 而且第一个单元是长度 用%s也不好输出 感觉是多此一举了

本文出自 “zjwzjw369” 博客,谢绝转载!

String的c语言实现

标签:c语言   string   

原文地址:http://zjwzjw369.blog.51cto.com/10388875/1661658

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!