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