/*-------------------------------------------------------------------------*/ /* mystring.c */ /*-------------------------------------------------------------------------*/ #include "mystring.h" size_t mystrlen(const char *pc) { const char *pcStart = pc; while (*pc != '\0') ++pc; return pc - pcStart; } int mystrcmp(const char *pcFirst, const char *pcSecond) { while ((*pcFirst != '\0') && (*pcFirst == *pcSecond)) { ++pcFirst; ++pcSecond; } return *pcFirst - *pcSecond; } int mystrncmp(const char *pcFirst, const char *pcSecond, size_t uiCount) { while ((uiCount > 0) && (*pcFirst != '\0') && (*pcFirst == *pcSecond)) { ++pcFirst; ++pcSecond; --uiCount; } if (uiCount <= 0) return 0; return *pcFirst - *pcSecond; } char *mystrcpy(char *pcTo, const char *pcFrom) { char *pcReturn = pcTo; while (*pcFrom != '\0') { *pcTo = *pcFrom; ++pcFrom; ++pcTo; } *pcTo = '\0'; return pcReturn; } char *mystrncpy(char *pcTo, const char *pcFrom, size_t uiCount) { char *pcReturn = pcTo; while (uiCount > 0) { *pcTo = *pcFrom; ++pcTo; if (*pcFrom != '\0') ++pcFrom; --uiCount; } return pcReturn; } char *mystrcat(char *pcTo, const char *pcFrom) { char *pcReturn = pcTo; while (*pcTo != '\0') ++pcTo; while (*pcFrom != '\0') { *pcTo = *pcFrom; ++pcTo; ++pcFrom; } *pcTo = '\0'; return pcReturn; } char *mystrncat(char *pcTo, const char *pcFrom, size_t uiCount) { char *pcReturn = pcTo; while (*pcTo != '\0') ++pcTo; while ((uiCount > 0) && (*pcFrom != '\0')) { *pcTo = *pcFrom; ++pcTo; ++pcFrom; --uiCount; } *pcTo = '\0'; return pcReturn; } char *mystrchr(const char *pc, int iChar) { while (*pc != '\0') { if (*pc == (char)iChar) return (char*)pc; ++pc; } return NULL; } char *mystrrchr(const char *pc, int iChar) { const char *pcReturn = NULL; while (*pc != '\0') { if (*pc == (char)iChar) pcReturn = pc; ++pc; } return (char*)pcReturn; } size_t mystrspn(const char *pc, const char *pcPrefixChars) { const char *pcStart = pc; while ((*pc != '\0') && mystrchr(pcPrefixChars, *pc)) ++pc; return pc - pcStart; } size_t mystrcspn(const char *pc, const char *pcPrefixChars) { const char *pcStart = pc; while ((*pc != '\0') && ! mystrchr(pcPrefixChars, *pc)) ++pc; return pc - pcStart; } char *mystrpbrk(const char *pc, const char *pcSearchChars) { while (*pc != '\0') { if (mystrchr(pcSearchChars, *pc)) return (char*)pc; ++pc; } return NULL; } static int strprefix(const char *pcSearchStr, const char *pc) { while ((*pcSearchStr != '\0') && (*pcSearchStr == *pc)) { ++pcSearchStr; ++pc; } if (*pcSearchStr != '\0') return 0; return 1; } char *mystrstr(const char *pc, const char *pcSearchStr) { if (*pcSearchStr == '\0') return (char*)pc; while (*pc != '\0') { if (strprefix(pcSearchStr, pc)) return (char*)pc; ++pc; } return NULL; }