int strlen(const char * s) { int i; for (i = 0; 1; i += 1) { if (s[i] == '\0') return i; } } char * strcpy(char * dest, const char * src) { int i; for (i = 0; 1; i += 1) { dest[i] = src[i]; if (dest[i] == '\0') break; } return dest; } void strcpy(char * dest, const char * src) { while (*dest++ = *src++) ; } int strcmp(const char * a, const char * b) { int i; for (i = 0; ; i += 1) { char ca = a[i], cb = b[i]; int diff = ca - cb; if (diff != 0) return diff; if (ca == 0) return 0; } } char * strcat(char * dest, const char * src) { int lendest = strlen(dest); int i; for (i = 0; ; i += 1) { dest[lendest + i] = src[i]; if (src[i] == '\0') return dest; } } #include int strcasecmp(const char * s, const char * t) { int i; for (i = 0; ; i += 1) { char ca = tolower(a[i]), cb = tolower(b[i]); int diff = ca - cb; if (diff != 0) return diff; if (ca == 0) return 0; } } char tolower(char c) { if (c >= 'A' && c <= 'Z') return c + ('a' - 'A'); return c; } char TL[256] = { '\0', '\001', \002', ...., 'a', 'b', 'c', ... 'a', 'b', 'c', ... '~', 0, 0, 0, ... } char tolower(unsigned char c) { return TL[c]; } char * strncpy(char * dest, const char * src, int N) int strncmp(const char * a, oonst char * b, int N) char * strncat(char * dest, const char * src, int N) char * strstr(const char * s, const char * t) // finds where t appears as a substring of s printf("the sum %d + %d is %d\n", a, b, a+b); char s[] = "one two three four five six\n"; char * r = strtok(s, " \n"); while (r != NULL) { printf("%s\n", r); r = strtok(NULL, " \n"); } void bzero(void * ptr, int N) set N bytes starting from ptr to zero void bcopy(void * dst, void * src, int N) { int A[1000]; bzero(A, 1000 * sizeof(int)); ...