Compare commits

..

4 Commits

Author SHA1 Message Date
db208bd912 remove strcmp and fix hidden bugs 2025-06-02 23:50:20 +02:00
e25b8236e4 switch from assert to if + return 2025-05-28 20:21:24 +02:00
77ccd59ce3 new untested code 2025-05-28 19:32:15 +02:00
fec9f2633d Portable Makefile 2025-05-28 19:31:56 +02:00
4 changed files with 71 additions and 20 deletions

View File

@ -1,4 +1,6 @@
tests : libstrops.a libstrops.so .POSIX :
tests : libstrops.a libstrops.so strops.h
gcc -ansi -I . -L. -o tests tests.c -Wl,-Bstatic -lstrops -Wl,-Bdynamic gcc -ansi -I . -L. -o tests tests.c -Wl,-Bstatic -lstrops -Wl,-Bdynamic
# gcc -ansi -I . -L. -o tests tests.c -lstrops # gcc -ansi -I . -L. -o tests tests.c -lstrops
@ -8,6 +10,18 @@ libstrops.so : strops.o
libstrops.a : strops.o libstrops.a : strops.o
ar cr libstrops.a strops.o ar cr libstrops.a strops.o
strops.o : strops.c strops.h strops.o : strops.c
gcc -c -fPIC -ansi -ggdb -o strops.o strops.c # gcc -c -ansi -fPIC -ggdb -o strops.o strops.c
# gcc -c -ansi -O2 -pipe -o strops.o strops.c gcc -c -ansi -fpic -O2 -pipe -o strops.o strops.c
.PHONY : install uninstall
install: libstrops.a libstrops.so strops.h
sudo mv libstrops.a /usr/local/lib
sudo mv libstrops.so /usr/local/lib
sudo cp strops.h /usr/local/include
uninstall:
sudo rm /usr/local/lib/libstrops.a
sudo rm /usr/local/lib/libstrops.so
sudo rm /usr/local/include/strops.h

View File

@ -67,7 +67,7 @@ ull_t strops_first_pos_of_char(const char* string, char char_to_search) {
} }
ull_t strops_first_pos_of_string(const char* string, const char* string_to_search) { ull_t strops_first_pos_of_string(const char* string, const char* string_to_search) {
char contains_string; bool_t contains_string;
ull_t sts_length = strops_length(string_to_search); ull_t sts_length = strops_length(string_to_search);
ull_t l = strops_length(string) - sts_length + 1; ull_t l = strops_length(string) - sts_length + 1;
ull_t i, j; ull_t i, j;
@ -86,7 +86,7 @@ ull_t strops_first_pos_of_string(const char* string, const char* string_to_searc
return i; return i;
} }
char strops_contains_char(const char* string, char char_to_search) { bool_t strops_contains_char(const char* string, char char_to_search) {
ull_t i; ull_t i;
for (i = 0; i < strops_length(string) + 1; i++) { for (i = 0; i < strops_length(string) + 1; i++) {
if (string[i] == char_to_search) { if (string[i] == char_to_search) {
@ -96,8 +96,8 @@ char strops_contains_char(const char* string, char char_to_search) {
return 0; return 0;
} }
char strops_contains_string(const char* string, const char* string_to_search) { bool_t strops_contains_string(const char* string, const char* string_to_search) {
char contains_string = 0; bool_t contains_string = 0;
ull_t sts_length = strops_length(string_to_search); ull_t sts_length = strops_length(string_to_search);
ull_t l = strops_length(string) - sts_length + 1; ull_t l = strops_length(string) - sts_length + 1;
ull_t i, j; ull_t i, j;
@ -116,6 +116,36 @@ char strops_contains_string(const char* string, const char* string_to_search) {
return contains_string; return contains_string;
} }
bool_t strops_equals(const char* string1, const char* string2) {
if (strops_length(string1) != strops_length(string2)) {
return 0;
}
bool_t equal = 1;
ull_t i;
for (i = 0; i < strops_length(string1); i++) {
if (string1[i] != string2[i]) {
equal = 0;
break;
}
}
return equal;
}
bool_t strops_starts_with(const char* string1, const char* string2) {
if (strops_length(string1) < strops_length(string2)) {
return 0;
}
bool_t starts_with = 1;
ull_t i;
for (i = 0; i < strops_length(string2); i++) {
if (string1[i] != string2[i]) {
starts_with = 0;
break;
}
}
return starts_with;
}
char* strops_to_lowercase(const char* string) { char* strops_to_lowercase(const char* string) {
char* result = strops_copy(string); char* result = strops_copy(string);
ull_t i; ull_t i;
@ -138,7 +168,7 @@ char* strops_to_uppercase(const char* string) {
return result; return result;
} }
int strops_is_lowercase(const char* string) { bool_t strops_is_lowercase(const char* string) {
ull_t i; ull_t i;
for (i = 0; i < strops_length(string); i++) { for (i = 0; i < strops_length(string); i++) {
if (!(string[i] >= 'a' && string[i] <= 'z')) { if (!(string[i] >= 'a' && string[i] <= 'z')) {
@ -148,7 +178,7 @@ int strops_is_lowercase(const char* string) {
return 1; return 1;
} }
int strops_is_uppercase(const char* string) { bool_t strops_is_uppercase(const char* string) {
ull_t i; ull_t i;
for (i = 0; i < strops_length(string); i++) { for (i = 0; i < strops_length(string); i++) {
if (!(string[i] >= 'A' && string[i] <= 'Z')) { if (!(string[i] >= 'A' && string[i] <= 'Z')) {
@ -256,7 +286,7 @@ char* strops_trim_right_string(const char* string, const char* string_to_remove)
ull_t offset = strops_length(result) - strops_length(string_to_remove); ull_t offset = strops_length(result) - strops_length(string_to_remove);
char* tmp = result + offset; char* tmp = result + offset;
while (strcmp(tmp, string_to_remove) == 0) { while (strops_equals(tmp, string_to_remove)) {
ull_t i; ull_t i;
for (i = 0; i < strops_length(string_to_remove); i++) { for (i = 0; i < strops_length(string_to_remove); i++) {
strops_remove_at_pos_char_inplace(result, offset); strops_remove_at_pos_char_inplace(result, offset);
@ -271,16 +301,13 @@ char* strops_trim_right_string(const char* string, const char* string_to_remove)
char* strops_trim_left_string(const char* string, const char* string_to_remove) { char* strops_trim_left_string(const char* string, const char* string_to_remove) {
assert(strops_length(string) >= strops_length(string_to_remove) && "string_to_remove cannot be bigger than string"); assert(strops_length(string) >= strops_length(string_to_remove) && "string_to_remove cannot be bigger than string");
char* result = strops_copy(string); char* result = strops_copy(string);
char* tmp = strops_copy(string_to_remove);
while (strcmp(tmp, string_to_remove) == 0) { while (strops_first_pos_of_string(result, string_to_remove) == 0) {
ull_t i; ull_t i;
for (i = 0; i < strops_length(string_to_remove); i++) { for (i = 0; i < strops_length(string_to_remove); i++) {
strops_remove_at_pos_char_inplace(result, 0); strops_remove_at_pos_char_inplace(result, 0);
} }
tmp = strops_copy_amount(result, strops_length(string_to_remove));
} }
free(tmp);
result = realloc(result, strops_length(result)); result = realloc(result, strops_length(result));
return result; return result;
} }

View File

@ -10,14 +10,24 @@
*/ */
typedef unsigned long long ull_t; typedef unsigned long long ull_t;
typedef unsigned char bool_t;
char contains_char(const char* string, char char_to_search); ull_t strops_length(const char* string);
char contains_string(const char* string, const char* string_to_search); char* strops_copy(const char* string);
char* strops_copy_amount(const char* string, ull_t amount);
ull_t strops_first_pos_of_char(const char* string, char char_to_search);
ull_t strops_first_pos_of_string(const char* string, const char* string_to_search);
bool_t strops_contains_char(const char* string, char char_to_search);
bool_t strops_contains_string(const char* string, const char* string_to_search);
bool_t strops_equals(const char* string1, const char* string2);
bool_t strops_starts_with(const char* string1, const char* string2);
char* strops_to_lowercase(const char* string); char* strops_to_lowercase(const char* string);
char* strops_to_uppercase(const char* string); char* strops_to_uppercase(const char* string);
int strops_is_lowercase(const char* string); bool_t strops_is_lowercase(const char* string);
int strops_is_uppercase(const char* string); bool_t strops_is_uppercase(const char* string);
char* strops_insert_at_pos_string(const char* string, const char* string_to_insert, ull_t pos); char* strops_insert_at_pos_string(const char* string, const char* string_to_insert, ull_t pos);
char* strops_remove_at_pos_char(const char* string, ull_t pos); char* strops_remove_at_pos_char(const char* string, ull_t pos);

View File

@ -79,7 +79,7 @@ int test_contains_string() {
char result; char result;
input = "I suck at C"; input = "I suck at C";
expected = 1; expected = 1;
result = strops_contains_string(input, "C"); result = strops_contains_string(input, "suck");
if (result != expected) { if (result != expected) {
printf("test_ failed\n"); printf("test_ failed\n");
printf("Got = %d\nExpected = %d\n", result, expected); printf("Got = %d\nExpected = %d\n", result, expected);