Compare commits

..
3 Commits
Author SHA1 Message Date
DarthMooMancer 871694a053 CHORE: STR_INIT 2026-10-14 11:14:47 -04:00
DarthMooMancer f397c1abf3 CHORE: Renaming API header folder 2026-10-14 11:03:40 -04:00
DarthMooMancer f3e416fa68 CMAKELISTS: A pullable api now 2026-10-14 10:31:31 -04:00
5 changed files with 142 additions and 8 deletions
Vendored
BIN
View File
Binary file not shown.
+14 -6
View File
@@ -1,12 +1,20 @@
cmake_minimum_required(VERSION 3.16)
cmake_minimum_required(VERSION 4.4.3)
project(libstr LANGUAGES C)
set(CMAKE_C_STANDARD 23)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
include_directories(include)
project(libstr LANGUAGES C)
set(SOURCES
src/main.c
add_library(libstr STATIC
src/string.c
# src/utils.c
# Add other modular string implementation units here as you expand:
)
add_executable(libstr ${SOURCES})
target_include_directories(libstr
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
)
add_executable(libstr_bin src/main.c)
set_target_properties(libstr_bin PROPERTIES OUTPUT_NAME "libstr")
target_link_libraries(libstr_bin PRIVATE libstr)
+62
View File
@@ -0,0 +1,62 @@
#ifndef STRING_H
#define STRING_H
#include <stddef.h>
#include <string.h>
/* Functions to implement:
charAt
substring / slice
concat
equals / compareTo
find / indexOf
contains / includes
isEmpty / isBlank
replace
split
trim
toLower / toLowerCase
toUpper / toUpperCase
startsWith
endsWith
replaceAll
join
*/
#define STR_INIT { .data = "", .len = 0 };
typedef struct
{
char* data;
size_t len;
} String;
String
strvmk(char* s);
size_t
strvlen(String s);
char*
strvget(String s);
String
strvreverse(String s);
void
strvfree(String s);
#endif
+8 -2
View File
@@ -1,6 +1,12 @@
#include <libstr/string.h>
#include <stdio.h>
int main() {
printf("%s", "Hello World");
int
main()
{
String hello = strvmk("Hello");
hello = strvreverse(hello);
printf("%s\n", strvget(hello));
strvfree(hello);
return 0;
}
+58
View File
@@ -0,0 +1,58 @@
#include <libstr/string.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct String
{
char* data;
size_t len;
};
String
strvmk(char* s)
{
size_t len = strlen(s);
String data = { .data = strdup(s), .len = len };
return data;
}
size_t
strvlen(String s)
{
return s.len;
}
char*
strvget(String s)
{
return s.data;
}
String
strvreverse(String s)
{
size_t n = strvlen(s);
char* data = malloc(n + 1);
memset(data, 0, strvlen(s));
int j = 0;
for (int i = n - 1; i >= 0; i--)
{
data[j] = s.data[i];
j++;
}
strvfree(s);
return strvmk(data);
}
void
strvfree(String s)
{
if (s.data)
{
free(s.data);
s.data = NULL;
}
}