char *mon_strcat(char *s1, const char *s2){ int lens1 = mon_strlen(s1); int lens2 = mon_strlen(s2); int i; for(i=0;i<=lens2;i++) *(s1+i+lens1)=*(s2+i); return s1 ; }
char *mon_strstr(const char *haystack, const char *needle){ int h_size = mon_strlen(haystack), n_size = mon_strlen(needle); int i=0; if(n_size==0){ return (char*)haystack; } while(i<h_size-n_size){ i++; if(mon_strncmp(haystack+i, needle, n_size)==0) return (char*)haystack+i; } return NULL; }
int mon_strcmp(const char *s1, const char *s2){ int i=0; while(*(s1+i)!='\0'||*(s2+i)!='\0'){ if(*(s1+i)==*(s2+i)){ i++; } else if(*(s1+i)>*(s2+i)){ return 1; } else if(*(s1+i)<*(s2+i)){ return -1; } } if(mon_strlen(s1)>mon_strlen(s2)){ return 1; } else if( mon_strlen(s2)>mon_strlen(s1)){ return -1; } return 0; }
char *CDECL mon_strcpy_s(char *dst, size_t dst_length, const char *src) { size_t src_length = mon_strlen(src); const char *s = src; if (!src || !dst || !dst_length || dst_length < src_length + 1) { return NULL; } while (*s != 0) *dst++ = *s++; *dst = '\0'; return dst; }
int main() { char s[] = "toto"; printf("%d\n", mon_strlen(s)); char s1[20] = "abce"; char s2[] = "abcd"; printf("%d\n", mon_strcmp(s1, s2)); printf("%d\n", mon_strncmp(s1, s2, 3)); printf("%s + %s = %s \n", s1, s2, mon_strcat(s1, s2)); printf("%c\n", *mon_strchr(s, 'o')); char str[] = "abcdef"; char substr[] = "cd"; printf("%s\n", mon_strstr(str, substr)); return 0; }
int mon_strncmp(const char *s1, const char *s2, int n){ int i=0; while((*(s1+i)!='\0'||*(s1+i)!='\0') && i<n){ if(*(s1+i)==*(s2+i)){ i++; } else if(*(s1+i)>*(s2+i)){ return 1; } else if(*(s1+i)<*(s2+i)){ return -1; } } if((mon_strlen(s1)<n)||(mon_strlen(s2)<n)){ if(mon_strlen(s1)>mon_strlen(s2)){ return 1; } else if( mon_strlen(s2)>mon_strlen(s1)){ return -1; } } return 0; }
MU_TEST(mon_strlen, strlen_non_ascii) { MU_ASSERT_EQUAL(mon_strlen("12345ééé"), 8) ; }
MU_TEST(mon_strlen, strlen_multi0) { char str[] = {'A','A','A','A','A','A','\0','A','A','\0'} ; MU_ASSERT_EQUAL(mon_strlen(str), 6) ; }
MU_TEST(mon_strlen, strlen0) { MU_ASSERT_EQUAL(mon_strlen(""), 0) ; }
MU_TEST(mon_strlen, strlen5) { MU_ASSERT_EQUAL(mon_strlen("12345"), 5) ; }