/* Napisać własne wersje następujących funkcji bibliotecznych. unsigned strlen(const char *str); - zwraca długość napisu char *strcpy(char *dst,const char *src); - kopiuje z src do dst, zwraca dst char *strdup(const char *src); - zwraca dynamiczną kopie src int strcmp(const char *A,const char *B); - zwr<0 => A0 => A>B, 0 => A=B char *strchr(char *str,char ch); - znajduje ch w str zwraca wskaźnik lub null char *strstr(char *str,const char *sub); - znajduje sub w str zwraca wskaźnik lub null */ #include unsigned strlen(const char *str) { const char *p=str; while(*p) ++p; return p-str; } char *strcpy(char *dst,const char *src) { for(char *p=dst;*src;*(p++)=*(src++)) {} return dst; } char *strdup(const char *src) { unsigned len=strlen(src)+1; char *dst=new char[len]; memcpy(dst,src,len); return dst; } int strcmp(const char *A,const char *B) { while(true) { char a=*(A++); int c=a-*(B++); if(c) return c; if(!a) return 0; } } char *strchr(char *str,char ch) { while(*str) { if(ch==*str) return str; ++str; } return 0; } char *strstr(char *str,const char *sub) { for(const char *p=sub,*k=sub+strlen(sub);*str;++str) { if(*str==*p) { if(++p==k) return str+(sub-k)+1; } else { if(p>sub) { str+=(sub-p); p=sub; } } } return 0; } int main() { return 0; }