From 2401b7240c5518d1818a457fd5617d09fa03e20c Mon Sep 17 00:00:00 2001 From: KIX Date: Sat, 29 Nov 2025 04:15:43 -0500 Subject: [PATCH] lab 0.1 code --- .vscode/tasks.json | 28 ++++++++ str.c | 163 +++++++++++++++++++++++++++++++-------------- str_test | Bin 0 -> 34616 bytes test/test1 | 6 ++ test/test2 | 0 wcl | Bin 0 -> 16312 bytes wcl.c | 65 ++++++++++++++++++ 7 files changed, 211 insertions(+), 51 deletions(-) create mode 100644 .vscode/tasks.json create mode 100755 str_test create mode 100644 test/test1 create mode 100644 test/test2 create mode 100755 wcl create mode 100644 wcl.c diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..08d9005 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,28 @@ +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: gcc build active file", + "command": "/usr/bin/gcc", + "args": [ + "-fdiagnostics-color=always", + "-g", + "${file}", + "-o", + "${fileDirname}/${fileBasenameNoExtension}" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "Task generated by Debugger." + } + ], + "version": "2.0.0" +} \ No newline at end of file diff --git a/str.c b/str.c index 8036bd5..29d1205 100644 --- a/str.c +++ b/str.c @@ -6,123 +6,184 @@ #define INIT_SZ 20 -//Внутренняя функция, -//позволяет убедиться что строка может вместить как минимум newsz символов void _str_ensure(str *s, int newsz) { - int tmp; - newsz += 1; // добавляем единичку чтобы влез нулевой байт - if (newsz < s->capacity) - return; + int tmp; + newsz += 1; + if (newsz < s->capacity) + return; - tmp = s->capacity * 2; - if (tmp > newsz) { - newsz = tmp; - } - s->ptr = xrealloc(s->ptr, newsz); - s->capacity = newsz; + tmp = s->capacity * 2; + if (tmp > newsz) { + newsz = tmp; + } + s->ptr = xrealloc(s->ptr, newsz); + s->capacity = newsz; } void str_init(str *s) { - assert(s); - // + assert(s); + s->len = 0; + s->capacity = INIT_SZ; + s->ptr = xmalloc(INIT_SZ); + s->ptr[0] = '\0'; } void str_deinit(str *s) { - if (s->ptr) - free(s->ptr); - s->ptr = NULL; + if (s->ptr) + free(s->ptr); + s->ptr = NULL; + s->len = 0; + s->capacity = 0; } void str_init_data(str *s, const char *initial) { - assert(s && initial); - // + assert(s && initial); + int len = strlen(initial); + s->len = len; + s->capacity = len + 1; + s->ptr = xmalloc(len + 1); + strcpy(s->ptr, initial); } char * str_data(str *s) { - assert(s); - // - return NULL; + assert(s); + return s->ptr; } void str_set(str *s, char *cstr) { - assert(s && cstr); - // + assert(s && cstr); + int len = strlen(cstr); + _str_ensure(s, len); + strcpy(s->ptr, cstr); + s->len = len; } str str_copy(str *s) { - assert(s); - // + assert(s); + str s2; + str_init_data(&s2, s->ptr); + return s2; } - + int str_count(str *s, char ch) { - assert(s); - // - return 0; + assert(s); + int count = 0; + for (int i = 0; i < s->len; i++) + { + if (s->ptr[i] == ch) + {count++;} + } + return count; } void str_append(str *s, char *cstr) { - assert(s && cstr); - // + assert(s && cstr); + str_append_n(s, cstr, strlen(cstr)); } void str_append_n(str *s, char *cstr, int len) { - assert(s && cstr); - // + assert(s && cstr); + _str_ensure(s, s->len + len); + memcpy(s->ptr + s->len, cstr, len); + s->len += len; + s->ptr[s->len] = '\0'; } void str_shrink(str *s, int len) { - assert(s && len >= 0); - // + assert(s && len >= 0); + if (len > s->len) + {return;} + s->len = len; + s->ptr[s->len] = '\0'; } int str_find(str *s, char *substr) { - assert(s && substr); - char *p = strstr(s->ptr, substr); - if (p == NULL) - return -1; - return p - s->ptr; + assert(s && substr); + char *p = strstr(s->ptr, substr); + if (p == NULL) + return -1; + return p - s->ptr; } str str_sub(str *s, int start_idx, int length) { - assert(s && start_idx >= 0 && length >= 0); + assert(s && start_idx >= 0 && length >= 0); - str s2; - str_init(&s2); - // - return s2; + str s2; + str_init(&s2); + + if (start_idx >= s->len) + {return s2;} + + int true_length = length; + if (start_idx + length > s->len) + {true_length = s->len - start_idx;} + + _str_ensure(&s2, true_length); + memcpy(s2.ptr, s->ptr + start_idx, true_length); + s2.len = true_length; + s2.ptr[true_length] = '\0'; + + return s2; } -// Hint: you can create temporary string object! int str_replace(str *s, char *substr, char *replacement) { - assert(s && substr && replacement); - // - return 0; -} + assert(s && substr && replacement); + + int count = 0; + str replaced; + str_init(&replaced); + + char *current = s->ptr; + char *found; + int substr_len = strlen(substr); + int replacement_len = strlen(replacement); + + while ((found = strstr(current, substr)) != NULL) + { + int prefix_len = found - current; + if (prefix_len > 0) + {str_append_n(&replaced, current, prefix_len);} + + str_append_n(&replaced, replacement, replacement_len); + + current = found + substr_len; + count++; + } + + if (*current != '\0') { + str_append(&replaced, current); + } + + str_set(s, replaced.ptr); + str_deinit(&replaced); + + return count; +} \ No newline at end of file diff --git a/str_test b/str_test new file mode 100755 index 0000000000000000000000000000000000000000..ae9211aad4d33b174c2c54655f46c4613255dde5 GIT binary patch literal 34616 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 literal 0 HcmV?d00001 diff --git a/wcl.c b/wcl.c new file mode 100644 index 0000000..dde7760 --- /dev/null +++ b/wcl.c @@ -0,0 +1,65 @@ +#include +#include +int countLines(const char* fname); +int countBytes (const char* fname); +int countWords (const char* fname); + +int main(int argc, char *argv[]) +{ + int nlines = 0; + int nbytes = 0; + int nwords = 0; + for(int i=1; i < argc; i++) + { + nlines = countLines(argv[i]); + nbytes = countBytes(argv[i]); + nwords = countWords(argv[i]); + printf("%s: lines - %d, bytes - %d, words - %d\n", argv[i], nlines, nbytes, nwords); + } + return 0; +} + +int countLines(const char* fname) +{ + FILE* file = fopen(fname, "r"); + int lines = 0; + char buffer[1024]; + while (fgets(buffer, sizeof(buffer), file) != NULL) + {lines++;} + fclose(file); + return lines; +} + +int countBytes (const char* fname) +{ + FILE* file = fopen(fname, "r"); + int bytes = 0; + int c; + while ((c = fgetc(file)) != EOF) + { + bytes++; + } + return bytes; +} + +int countWords (const char* fname) +{ + FILE* file = fopen(fname, "r"); + int words = 0; + int c; + int is_in_word = 0; + while ((c = fgetc(file)) != EOF) + { + if (isspace(c)) + {is_in_word = 0;} + else + { + if (is_in_word == 0) + { + words++; + is_in_word = 1; + } + } + } + return words; +}