| Directory: | ./ |
|---|---|
| File: | s21_trim.c |
| Date: | 2025-11-01 23:04:41 |
| Exec | Total | Coverage | |
|---|---|---|---|
| Lines: | 24 | 24 | 100.0% |
| Branches: | 26 | 26 | 100.0% |
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #include "s21_string.h" | ||
| 2 | |||
| 3 | int isTrimChar(char toCheck, const char *trim_chars); | ||
| 4 | |||
| 5 | 7 | void *s21_trim(const char *src, const char *trim_chars) { | |
| 6 |
4/4✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 5 times.
|
7 | if (src == S21_NULL || trim_chars == S21_NULL) { |
| 7 | 2 | return S21_NULL; | |
| 8 | } | ||
| 9 | |||
| 10 | 5 | s21_size_t n = s21_strlen(src); | |
| 11 | 5 | s21_size_t left = 0, right = n - 1; | |
| 12 | |||
| 13 |
4/4✓ Branch 0 taken 15 times.
✓ Branch 1 taken 3 times.
✓ Branch 3 taken 13 times.
✓ Branch 4 taken 2 times.
|
18 | while (left < n && isTrimChar(src[left], trim_chars)) { |
| 14 | 13 | left++; | |
| 15 | } | ||
| 16 | |||
| 17 |
6/6✓ Branch 0 taken 5 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 4 times.
✓ Branch 3 taken 1 times.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
|
7 | while (n != 0 && right >= left && isTrimChar(src[right], trim_chars)) { |
| 18 | 2 | right--; | |
| 19 | } | ||
| 20 | |||
| 21 | 5 | char *result = S21_NULL; | |
| 22 |
4/4✓ Branch 0 taken 3 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 1 times.
|
5 | if (n != 0 && left <= right) { |
| 23 | 2 | result = malloc((right - left + 2) * sizeof(char)); | |
| 24 |
2/2✓ Branch 0 taken 11 times.
✓ Branch 1 taken 2 times.
|
13 | for (s21_size_t i = left; i <= right; i++) { |
| 25 | 11 | result[i - left] = src[i]; | |
| 26 | } | ||
| 27 | 2 | result[right - left + 1] = '\0'; | |
| 28 | } else { | ||
| 29 | 3 | result = malloc(sizeof(char)); | |
| 30 | 3 | result[0] = '\0'; | |
| 31 | } | ||
| 32 | |||
| 33 | 5 | return result; | |
| 34 | } | ||
| 35 | |||
| 36 | 19 | int isTrimChar(char toCheck, const char *trim_chars) { | |
| 37 | 19 | int check = 0; | |
| 38 | |||
| 39 |
4/4✓ Branch 0 taken 42 times.
✓ Branch 1 taken 15 times.
✓ Branch 2 taken 38 times.
✓ Branch 3 taken 4 times.
|
57 | for (const char *p = trim_chars; *p != '\0' && check == 0; p++) { |
| 40 |
2/2✓ Branch 0 taken 15 times.
✓ Branch 1 taken 23 times.
|
38 | if (toCheck == *p) { |
| 41 | 15 | check = 1; | |
| 42 | } | ||
| 43 | } | ||
| 44 | |||
| 45 | 19 | return check; | |
| 46 | } | ||
| 47 |