#include <stdio.h>
// 1. String Length (Exercise 8.30)
size_t my_strlen_arr(const char *s) {
size_t i = 0;
while (s[i] != '\0') i++;
return i;
}
size_t my_strlen_ptr(const char *s) {
size_t len = 0;
while (*s++) len++;
return len;
}
// 2. String Copy (Exercise 8.28)
void my_strcpy_arr(char *s1, const char *s2) {
int i = 0;
while ((s1[i] = s2[i]) != '\0') i++;
}
void my_strcpy_ptr(char *s1, const char *s2) {
while ((*s1++ = *s2++));
}
// 3. String Compare (Exercise 8.29)
int my_strcmp_arr(const char *s1, const char *s2) {
int i = 0;
while (s1[i] == s2[i] && s1[i] != '\0') i++;
return s1[i] - s2[i];
}
int my_strcmp_ptr(const char *s1, const char *s2) {
while (*s1 == *s2 && *s1 != '\0') {
s1++; s2++;
}
return *s1 - *s2;
}
int main(void) {
char str1[50];
char str2[] = "Hello";
char str3[] = "World";
my_strcpy_ptr(str1, str2);
printf("Copied string: %s\n", str1
); printf("Length of string: %zu\n", my_strlen_arr
(str1
)); printf("Comparison result: %d\n", my_strcmp_ptr
(str2
, str3
));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyAxLiBTdHJpbmcgTGVuZ3RoIChFeGVyY2lzZSA4LjMwKQpzaXplX3QgbXlfc3RybGVuX2Fycihjb25zdCBjaGFyICpzKSB7CiAgICBzaXplX3QgaSA9IDA7CiAgICB3aGlsZSAoc1tpXSAhPSAnXDAnKSBpKys7CiAgICByZXR1cm4gaTsKfQpzaXplX3QgbXlfc3RybGVuX3B0cihjb25zdCBjaGFyICpzKSB7CiAgICBzaXplX3QgbGVuID0gMDsKICAgIHdoaWxlICgqcysrKSBsZW4rKzsKICAgIHJldHVybiBsZW47Cn0KCi8vIDIuIFN0cmluZyBDb3B5IChFeGVyY2lzZSA4LjI4KQp2b2lkIG15X3N0cmNweV9hcnIoY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKSB7CiAgICBpbnQgaSA9IDA7CiAgICB3aGlsZSAoKHMxW2ldID0gczJbaV0pICE9ICdcMCcpIGkrKzsKfQp2b2lkIG15X3N0cmNweV9wdHIoY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKSB7CiAgICB3aGlsZSAoKCpzMSsrID0gKnMyKyspKTsKfQoKLy8gMy4gU3RyaW5nIENvbXBhcmUgKEV4ZXJjaXNlIDguMjkpCmludCBteV9zdHJjbXBfYXJyKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikgewogICAgaW50IGkgPSAwOwogICAgd2hpbGUgKHMxW2ldID09IHMyW2ldICYmIHMxW2ldICE9ICdcMCcpIGkrKzsKICAgIHJldHVybiBzMVtpXSAtIHMyW2ldOwp9CmludCBteV9zdHJjbXBfcHRyKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikgewogICAgd2hpbGUgKCpzMSA9PSAqczIgJiYgKnMxICE9ICdcMCcpIHsKICAgICAgICBzMSsrOyBzMisrOwogICAgfQogICAgcmV0dXJuICpzMSAtICpzMjsKfQoKaW50IG1haW4odm9pZCkgewogICAgY2hhciBzdHIxWzUwXTsKICAgIGNoYXIgc3RyMltdID0gIkhlbGxvIjsKICAgIGNoYXIgc3RyM1tdID0gIldvcmxkIjsKCiAgICBteV9zdHJjcHlfcHRyKHN0cjEsIHN0cjIpOwogICAgcHJpbnRmKCJDb3BpZWQgc3RyaW5nOiAlc1xuIiwgc3RyMSk7CiAgICBwcmludGYoIkxlbmd0aCBvZiBzdHJpbmc6ICV6dVxuIiwgbXlfc3RybGVuX2FycihzdHIxKSk7CiAgICBwcmludGYoIkNvbXBhcmlzb24gcmVzdWx0OiAlZFxuIiwgbXlfc3RyY21wX3B0cihzdHIyLCBzdHIzKSk7CgogICAgcmV0dXJuIDA7Cn0=