TAD String

Embed Size (px)

Citation preview

#include #include #include #include ///No arquivo .h typedef struct SString *String; /*String inicString (char *str); void destroiString (String s); char ler_pos (String str,unsigned pos); void escrever_pos (String str,unsigned pos,char c);*/ ///No arquivo .c struct SString { char *text; unsigned tam;}; String inicString (char *str) { String resp=(String)malloc(sizeof(struct SString)); if (resp) { resp->tam=strlen(str); resp->text=(char *)malloc(resp->tam+1); if (resp->text) strcpy(resp->text,str); else { free(resp); resp=NULL; } } return resp; } void destroiString(String s) { free(s->text); free(s); } char ler_pos (String str,unsigned pos) { assert(str); assert(str->text); assert(postam)); return (str->text)[pos]; } void escrever_pos (String str,unsigned pos,char c) { assert(str); assert(str->text); assert(postam)); (str->text)[pos]=c; } String duplicastr (String str) { assert(str);return inicString(str->text); } String atribuistr (String str,String str2) { assert (str && str2); str->text=(char *)realloc(str->text,str2->tam+1); if (str->text) { str->tam=str2->tam; strcpy(str->text,str2->text); } else { free(str); str=NULL; } return str; } String concatenastr (String str,String str2) { assert (str && str2); str->text=(char *)realloc(str->text,str->tam+1); if (str->text) { str->tam+=str2->tam; strcat(str->text,str2->text); } else { free(str); str=NULL; } return str; } int main() { unsigned pos=4; char c='v'; String s=inicString("Girafa"); String z=inicString("a ve"); assert(!strcmp(s->text,"Girafa")); assert(!strcmp(z->text,"a ve")); assert(ler_pos(s,pos)=='f'); escrever_pos(s,pos,c); assert(ler_pos(s,pos)=='v'); assert(!strcmp(duplicastr(s)->text,"Girava")); atribuistr(s,z); assert(!strcmp(s->text,z->text)); printf("ANTES:\ns = %s\nz = %s\n\n",s->text,z->text); ///Apenas para teste concatenastr(s,z); printf("DEPOIS:\ns = %s\nz = %s\n\n",s->text,z->text); ///Apenas para teste assert(!strcmp(s->text,"a vea ve")); destroiString(s); destroiString(z); return 0; }