SayoriOS 0.3.3

String.c
1 #include "kernel.h"
2 #include "eBat.h"
3 #include "eBatRuntime.h"
4
5 int bat_strtol(char *string) {
6 int number = 0;
7 int sign = 1;
8 int i = 0;
9
10 // Пропускаем пробелы в начале строки
11 while (string[i] == ' ' && string[i] != '\0') {
12 i++;
13 }
14
15 // Обработка знака
16 if (string[i] == '-' || string[i] == '+') {
17 sign = (string[i] == '-' ? -1 : 1);
18 i++;
19 }
20
21 // Извлечение цифр
22 while (isdigit(string[i]) && string[i] != '\0') {
23 number = number * 10 + (string[i] - '0');
24 i++;
25 }
26
27 return number * sign;
28 }
29 void bat_trim(char* string){
30 int start = 0, end = strlen(string) - 1;
31 while (string[start] == ' ' || string[start] == '\t' || string[start] == '\n' || string[start] == 0xD){
32 start++;
33 }
34 while (string[end] == ' ' || string[end] == '\t' || string[end] == '\n' || string[end] == 0xD){
35 end--;
36 }
37 for (int i = 0; i <= end - start; i++){
38 string[i] = string[i + start];
39 }
40 string[end - start + 1] = '\0';
41 }
42
43 void bat_str_debug(char* string){
44 return;
45 bat_debug(" |--- String debug: '%s'\n", string);
46 int len = strlen(string);
47 for (int i = 0; i < len; i++){
48 bat_debug(" |--- [%d | %d] [0x%x] '%c'\n", i+1, len, string[i], string[i]);
49 }
50 }
51
52 char* bat_strdup(const char *str) {
53 // Проверяем, не является ли указатель NULL
54 if (str == NULL) {
55 return NULL;
56 }
57
58 // Получаем длину исходной строки
59 size_t len = strlen(str);
60
61 // Выделяем память для новой строки (включая один байт для нулевого терминатора)
62 char *copy = (char*)malloc(len + 1);
63 memset(copy, 0, len + 1);
64 if (copy == NULL) {
65 return NULL; // Проверка на успешное выделение памяти
66 }
67
68 // Копируем строку в новую память
69 strcpy(copy, str);
70
71 return copy; // Возвращаем указатель на новую строку
72 }
73
74 char* bat_toLower(char* str) {
75 int i;
76 for (i = 0; str[i] != '\0'; i++) {
77 if (str[i] >= 'A' && str[i] <= 'Z') { // Проверяем, является ли символ заглавным
78 str[i] = str[i] + 32; // Преобразуем в строчную букву
79 }
80 }
81 return str; // Возвращаем изменённую строку
82 }
83
84 char* bat_toUpper(char *str) {
85 int i;
86 for (i = 0; str[i] != '\0'; i++) {
87 if (str[i] >= 'a' && str[i] <= 'z') {
88 str[i] = str[i] - 32;
89 }
90 }
91 return str;
92 }
strlen
size_t strlen(const char *str)
Возращает длину строки
Definition: string.c:88
memset
void * memset(void *ptr, char value, size_t num)
Заполнение массива указанными символами
Definition: string.c:203
strcpy
int strcpy(char *dest, const char *src)
Копирование строк
Definition: string.c:282