Skip to content

Commit babbdb3

Browse files
author
Gonzalo Diaz
committed
[REFACTOR] [Hacker Rank] Warmup: Time Conversion solved ✅. Triying to fix sonarlint detected issues.
1 parent d2f0251 commit babbdb3

File tree

2 files changed

+40
-3
lines changed

2 files changed

+40
-3
lines changed

src/lib/exercises/include/exercises/hackerrank/warmup/time_conversion.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
#ifdef __cplusplus
44
extern "C" {
55
#endif
6+
7+
char *HACKERRANK_WARMUP_getStringFragment(const char *s, unsigned long len,
8+
unsigned long from, unsigned long to);
9+
char *HACKERRANK_WARMUP_getFirst(const char *s, unsigned long n);
10+
char *HACKERRANK_WARMUP_getLast(const char *s, unsigned long n);
11+
612
char *HACKERRANK_WARMUP_firstN(const char *s, unsigned long n);
713
char *HACKERRANK_WARMUP_lastN(const char *s, unsigned long n);
814

src/lib/exercises/src/hackerrank/warmup/time_conversion.c

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,21 +54,52 @@ char *HACKERRANK_WARMUP_lastN(const char *s, unsigned long n) {
5454
return result;
5555
}
5656

57+
char *HACKERRANK_WARMUP_getFirst(const char *s, unsigned long n) {
58+
return HACKERRANK_WARMUP_getStringFragment(s, strlen(s), 0, n);
59+
}
60+
61+
char *HACKERRANK_WARMUP_getStringFragment(const char *s, unsigned long len,
62+
unsigned long from,
63+
unsigned long to) {
64+
// unsigned long len = strlen(s);
65+
if (to > len) {
66+
return NULL;
67+
}
68+
if (to == 0) {
69+
return NULL;
70+
}
71+
72+
char *result = (char *)malloc((to + 1) * sizeof(char));
73+
if (result == NULL) {
74+
return NULL;
75+
}
76+
77+
strncpy(result, s + from, to);
78+
79+
result[to] = '\0';
80+
81+
return result;
82+
}
83+
5784
char *HACKERRANK_WARMUP_timeConversion(const char *s) {
5885
char *meridian = HACKERRANK_WARMUP_lastN(s, 2);
5986

60-
char *hour_str = HACKERRANK_WARMUP_firstN(s, 2);
87+
// char *hour_str = HACKERRANK_WARMUP_firstN(s, 2);
88+
char *hour_str = HACKERRANK_WARMUP_getFirst(s, 2);
89+
6190
char *time_str = (char *)malloc((strlen(s) + 1) * sizeof(char));
6291
if (time_str == NULL) {
6392
free(hour_str);
6493
free(meridian);
6594
return NULL;
6695
}
6796
strcpy(time_str, s);
68-
char *temp_time_str = HACKERRANK_WARMUP_lastN(time_str, strlen(time_str) - 2);
97+
char *temp_time_str;
98+
unsigned long time_str_len = strlen(time_str);
99+
temp_time_str = HACKERRANK_WARMUP_lastN(time_str, time_str_len - 2);
69100
free(time_str);
70101
time_str = temp_time_str;
71-
temp_time_str = HACKERRANK_WARMUP_firstN(time_str, strlen(time_str) - 2);
102+
temp_time_str = HACKERRANK_WARMUP_firstN(time_str, time_str_len - 2);
72103
free(time_str);
73104
time_str = temp_time_str;
74105

0 commit comments

Comments
 (0)