Compare commits
4 Commits
61a398f402
...
main
Author | SHA1 | Date | |
---|---|---|---|
db208bd912
|
|||
e25b8236e4
|
|||
77ccd59ce3
|
|||
fec9f2633d
|
22
Makefile
22
Makefile
@ -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
|
||||||
|
49
strops.c
49
strops.c
@ -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;
|
||||||
}
|
}
|
||||||
|
18
strops.h
18
strops.h
@ -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);
|
||||||
|
2
tests.c
2
tests.c
@ -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);
|
||||||
|
Reference in New Issue
Block a user