diff --git a/c_modern_approach/Strings/exercises/exc_04.c b/c_modern_approach/Strings/exercises/exc_04.c new file mode 100644 index 0000000..f49fb6c --- /dev/null +++ b/c_modern_approach/Strings/exercises/exc_04.c @@ -0,0 +1,48 @@ +#include +#include + +#define MAX_REMIND 50 +#define MSG_LEN 60 + +int read_line(char str[], int n); +int main(void) { + char reminders[MAX_REMIND][MSG_LEN + 3]; + char day_str[3], msg_str[MSG_LEN + 1]; + int day, i, j, num_remind = 0; + for (;;) { + if (num_remind == MAX_REMIND) { + printf("-- No space left --\n"); + break; + } + printf("Enter day and reminder: "); + scanf("%2d", &day); + if (day == 0) + break; + sprintf(day_str, "%2d", day); + read_line(msg_str, MSG_LEN); + for (i = 0; i < num_remind; i++) + if (strcmp(day_str, reminders[i]) < 0) + break; + for (j = num_remind; j > i; j--) + strcpy(reminders[j], reminders[j - 1]); + strcpy(reminders[i], day_str); + strcat(reminders[i], msg_str); + num_remind++; + } + printf("\nDay Reminder\n"); + for (i = 0; i < num_remind; i++) + printf(" %s\n", reminders[i]); + return 0; +} + +int read_line(char str[], int n) { + int ch, i = 0; + + while ((ch = getchar()) != '\n') { + if (i < n) { + str[i++] = ch; + } + } + str[i] = '\0'; + return i; +} diff --git a/c_modern_approach/Strings/exercises/exc_05A.c b/c_modern_approach/Strings/exercises/exc_05A.c new file mode 100644 index 0000000..ac97f15 --- /dev/null +++ b/c_modern_approach/Strings/exercises/exc_05A.c @@ -0,0 +1,23 @@ +#include +#include +#define MAX_REMIND 50 +#define MSG_LEN 60 + +char *capitalize(char cap_string[]); + +int main() { + char string_to_capitalize[] = "some fuck1ng bullshit!"; + char *cap; + cap = capitalize(string_to_capitalize); + printf("%s", cap); +} + +char *capitalize(char cap_string[]) { + char *p; + char capitalized_string[MSG_LEN]; + p = capitalized_string; + for (int i = 0; cap_string[i] != '\0'; i++) { + capitalized_string[i] = toupper(cap_string[i]); + } + return p; +} diff --git a/c_modern_approach/Strings/exercises/exc_05B.c b/c_modern_approach/Strings/exercises/exc_05B.c new file mode 100644 index 0000000..6402da0 --- /dev/null +++ b/c_modern_approach/Strings/exercises/exc_05B.c @@ -0,0 +1,26 @@ +#include +#include +#define MAX_REMIND 50 +#define MSG_LEN 60 + +char *capitalize(char cap_string[]); + +int main() { + char string_to_capitalize[] = "some fuck1ng bullshit!"; + char *cap; + cap = capitalize(string_to_capitalize); + printf("%s", cap); +} + +char *capitalize(char cap_string[]) { + char *p; + char capitalized_string[MSG_LEN]; + int i = 0; + p = capitalized_string; + while (*cap_string) { + capitalized_string[i] = toupper(*cap_string); + i++; + cap_string++; + } + return p; +} diff --git a/c_modern_approach/Strings/exercises/exc_06.c b/c_modern_approach/Strings/exercises/exc_06.c new file mode 100644 index 0000000..d8f49c5 --- /dev/null +++ b/c_modern_approach/Strings/exercises/exc_06.c @@ -0,0 +1,36 @@ +#include +#define MAX_LEN 60 +char *censor(char cens_string[]); + +int main() { + char string_to_censor[MAX_LEN] = "Hello my dear foolish foles!"; + char *cens; + cens = censor(string_to_censor); + printf("INPUT:\t %s\n", string_to_censor); + printf("OUTPUT:\t %s\n", cens); +} + +char *censor(char cens_string[]) { + char to_cens[] = "foo"; + char cens_char = 'x'; + char censored[MAX_LEN + 1], *c, *start; + c = censored; + start = c; + int i = 0; + // Starting iteration on string to censor + while (*cens_string) { + // If we find 'f' char - we need to check current 'f' char and next 2 for + // equality with to_cens string + if (*cens_string == to_cens[0] && *(cens_string + 1) == to_cens[1] && + *(cens_string + 2) == to_cens[2]) { + *c = cens_char; + *(c + 1) = cens_char; + *(c + 2) = cens_char; + cens_string += 3; + c += 3; + } else { + *c++ = *cens_string++; + } + } + return start; +}