Add some string exercises
This commit is contained in:
parent
28e9800830
commit
58aa6aba6c
4 changed files with 133 additions and 0 deletions
48
c_modern_approach/Strings/exercises/exc_04.c
Normal file
48
c_modern_approach/Strings/exercises/exc_04.c
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#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;
|
||||||
|
}
|
23
c_modern_approach/Strings/exercises/exc_05A.c
Normal file
23
c_modern_approach/Strings/exercises/exc_05A.c
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#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;
|
||||||
|
}
|
26
c_modern_approach/Strings/exercises/exc_05B.c
Normal file
26
c_modern_approach/Strings/exercises/exc_05B.c
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#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;
|
||||||
|
}
|
36
c_modern_approach/Strings/exercises/exc_06.c
Normal file
36
c_modern_approach/Strings/exercises/exc_06.c
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#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;
|
||||||
|
}
|
Loading…
Reference in a new issue