Compare commits
3
Commits
4ea742946a
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
871694a053 | ||
|
|
f397c1abf3 | ||
|
|
f3e416fa68 |
+14
-6
@@ -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 23)
|
||||||
set(CMAKE_C_STANDARD_REQUIRED ON)
|
set(CMAKE_C_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
include_directories(include)
|
|
||||||
project(libstr LANGUAGES C)
|
|
||||||
|
|
||||||
set(SOURCES
|
add_library(libstr STATIC
|
||||||
src/main.c
|
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)
|
||||||
|
|||||||
@@ -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
@@ -1,6 +1,12 @@
|
|||||||
|
#include <libstr/string.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
int main() {
|
int
|
||||||
printf("%s", "Hello World");
|
main()
|
||||||
|
{
|
||||||
|
String hello = strvmk("Hello");
|
||||||
|
hello = strvreverse(hello);
|
||||||
|
printf("%s\n", strvget(hello));
|
||||||
|
strvfree(hello);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user