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 }
size_t strlen(const char *str)
Возращает длину строки
Definition: string.c:88
void * memset(void *ptr, char value, size_t num)
Заполнение массива указанными символами
Definition: string.c:203
int strcpy(char *dest, const char *src)
Копирование строк
Definition: string.c:282