diff --git a/cpp/._rvmain.cpp.swp b/cpp/._rvmain.cpp.swp deleted file mode 100644 index e6a5d76..0000000 Binary files a/cpp/._rvmain.cpp.swp and /dev/null differ diff --git a/cpp/_rvmain.cpp b/cpp/_rvmain.cpp index 53c49d3..fa5d9e2 100644 --- a/cpp/_rvmain.cpp +++ b/cpp/_rvmain.cpp @@ -31,35 +31,112 @@ char *alloc(int n) return 0; } +// def. model danych -//funkcja lokuje pamiec dla kazdego slowa. +//pre processor +#define LEN (8+2)*10 + +struct model { + char * str; + uint32_t len ; +}; + + +//alg +// prosta implementacji func. z bibl. std. strok przy uzyciu gpt3.5 // -//wskaznik p1 wskazuje na pierwsza litera slowa, -//liczy ilosc slowa i alokuje pamiec dla niego. +#define NULL ((void*) 0) -void alg (char *s) { - - char count; - - for (int8_t c = 0; c <= strlen(s); c++) { - - if (s[c] != 0x20 && s[c] != '\0') { - count++; - } else { - char *p1 = &s[++c]; - alloc (count); - count = 0; +// +// Funkcja pomocnicza do sprawdzania, czy znak jest wśród delimiterów +bool is_delim(char c, const char *delims) { + while (*delims) { + if (c == *delims) { + return true; } - + delims++; } + return false; } + +// Najprostsza implementacja funkcji strtok +char *simple_strtok(char *str, const char *delims) { + static char *static_str = (char *) NULL; // Przechowuje wskaźnik do bieżącej pozycji w ciągu + + // Jeśli przekazano nowy ciąg, zaktualizuj static_str + if (str != NULL) { + static_str = str; + } + + // Jeśli static_str jest NULL, zwróć NULL + if (static_str == NULL) { + return (char *) NULL; + } + + // Pomiń początkowe delimitery + while (*static_str && is_delim(*static_str, delims)) { + static_str++; + } + + // Jeśli doszliśmy do końca ciągu, zwróć NULL + if (*static_str == '\0') { + return (char *) NULL; + } + + // Zapisz początek tokenu + char *token_start = static_str; + + // Znajdź koniec tokenu + while (*static_str && !is_delim(*static_str, delims)) { + static_str++; + } + + // Jeśli znaleziono delimitery, zamień je na '\0' i zaktualizuj static_str + if (*static_str) { + *static_str = '\0'; + static_str++; + } + + // Zwróć początek tokenu + return token_start; +} + +////func alg +//in: ptr to date +//return: count of words +int alg (const char * ptr) { + + char bufer[ALLOCSIZE]; + strcpy(bufer, (char *)ptr); + + const char *delims = " ,.!?:;\n\t"; + + int8_t count = 0; + + char *token = simple_strtok(bufer, delims); + while (token != (char *)NULL) { + count++; + token = simple_strtok((char *)NULL, delims); + } + return count; +} + + int main() { char *str = "If wantered relation no surprise of all"; - alg(str); - + struct model *ptr = (struct model *) alloc(LEN); + if (ptr != (struct model *)NULL) { + ptr->str = alloc(strlen((char *)str) + 1); + if (ptr->str != (char *)NULL) { + strcpy (ptr->str, (char *)str); + ptr->len = strlen(ptr->str); + int8_t count = alg(ptr->str); + } + } + return 1; } diff --git a/cpp/_rvmain.cpp.save b/cpp/_rvmain.cpp.save new file mode 100644 index 0000000..b986dde --- /dev/null +++ b/cpp/_rvmain.cpp.save @@ -0,0 +1,142 @@ +#include + +int strlen(char *s) { + char *p = s; + while (*p != '\0') + p++; + return p - s; +} + +void strcpy(char *s, char *t) +{ + while (*s++ = *t++); +} +#define ALLOCSIZE 10000 + +static char allocbuf[ALLOCSIZE]; +static char *allocp = allocbuf; + +char *alloc(int n) +{ + + if (n % 4 != 0) { + n += 4 - (n % 4); + } + + + if (allocbuf + ALLOCSIZE - allocp >= n) { + allocp += n; + return allocp - n; + } else + return 0; +} + +// def. model danych + +//pre processor +#define LEN (8+2)*10 + +struct model { + char * str; + uint32_t len ; +}; + + +//alg +// prosta implementacji func. z bibl. std. strok przy uzyciu gpt3.5 +// + +#define NULL ((void*) 0) + +// +// Funkcja pomocnicza do sprawdzania, czy znak jest wśród delimiterów +bool is_delim(char c, const char *delims) { + while (*delims) { + if (c == *delims) { + return true; + } + delims++; + } + return false; +} + +// Najprostsza implementacja funkcji strtok +char *simple_strtok(char *str, const char *delims) { + static char *static_str = (char *) NULL; // Przechowuje wskaźnik do bieżącej pozycji w ciągu + + // Jeśli przekazano nowy ciąg, zaktualizuj static_str + if (str != NULL) { + static_str = str; + } + + // Jeśli static_str jest NULL, zwróć NULL + if (static_str == NULL) { + return (char *) NULL; + } + + // Pomiń początkowe delimitery + while (*static_str && is_delim(*static_str, delims)) { + static_str++; + } + + // Jeśli doszliśmy do końca ciągu, zwróć NULL + if (*static_str == '\0') { + return (char *) NULL; + } + + // Zapisz początek tokenu + char *token_start = static_str; + + // Znajdź koniec tokenu + while (*static_str && !is_delim(*static_str, delims)) { + static_str++; + } + + // Jeśli znaleziono delimitery, zamień je na '\0' i zaktualizuj static_str + if (*static_str) { + *static_str = '\0'; + static_str++; + } + + // Zwróć początek tokenu + return token_start; +} + +////func alg +//in: ptr to date +//return: count of words +int alg (const char * ptr) { + + char bufer[ALLOCSIZE]; + strcpy(bufer, (char *)ptr); + + const char *delims = " ,.!?:;\n\t"; + + int8_t count = 0; + + char *token = simple_strtok(bufer, delims); + while (token != (char *)NULL) { + count++; + token = simple_strtok((char *)NULL, delims); + } + return count; +} + + +int main() { + + const char *str = "If wantered relation no surprise of all"; + + struct model *ptr = (struct model *) alloc(LEN); + if (ptr != (struct model *) NULL) { + ptr->str = alloc(strlen((char *)str) + 1); + if (ptr->str != (char *)NULL) { + strcpy (ptr->str, (char *)str); + ptr->len = strlen(ptr->str); + + int8_t count = alg(ptr->str); + } + } + + return 1; +}