반응형
c언어 동적할당 - 문자열 - string.h 활용
[C언어 #64] 동적할당 - 문자열 - 길이, 문자 반환, 문자 입력
[C언어 #65] 동적할당 - 문자열 - 합치기/이어붙이기, 자르기
[C언어 #66] 동적할당 - 문자열 - 비교, 포함여부 판단
문자열 생성 - strlen, strcpy 활용
// strlen, strcpy 활용
text *newText(char *s) {
text *t = malloc(sizeof(text));
t->capacity = 24;
while (strlen(s) + 1 > t->capacity) t->capacity *= 2;
t->content = malloc(t->capacity);
strcpy(t->content, s);
return t;
}
|
문자열 길이 - strlen
int stringLength(text *t) {
return strlen(t->content);
}
|
문자열 비교 - strcmp
int stringCompare(text *t1, text *t2) {
return strcmp(t1->content, t2->content);
}
|
문자열 합치기/이어붙이기 - strcat
void stringAppend(text *t1, text *t2) {
int newLen = strlen(t1->content) + strlen(t2->content) + 1;
while (newLen > t1->capacity) t1->capacity *= 2;
t1->content = realloc(t1->content, t1->capacity);
strcat(t1->content, t2->content);
}
|
문자열 포함여부 - strstr
int stringFind(text *t, text *p) {
char *f = strstr(t->content, p->content);
return (f == NULL)? -1 : f - t->content;
}
|
동적할당 - 문자열 - string.h 활용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> struct text { int capacity; char *content; }; typedef struct text text; text *newText(char *s) { text *t = malloc(sizeof(text)); t->capacity = 24; while (strlen(s) + 1 > t->capacity) t->capacity *= 2; t->content = malloc(t->capacity); strcpy(t->content, s); return t; } void freeText(text *t) { free(t->content); free(t); } int stringLength(text *t) { return strlen(t->content); } int stringCompare(text *t1, text *t2) { return strcmp(t1->content, t2->content); } void stringAppend(text *t1, text *t2) { int newLen = strlen(t1->content) + strlen(t2->content) + 1; while (newLen > t1->capacity) t1->capacity *= 2; t1->content = realloc(t1->content, t1->capacity); strcat(t1->content, t2->content); } int stringFind(text *t, text *p) { char *f = strstr(t->content, p->content); return (f == NULL)? -1 : f - t->content; } int main() { // text 구조체 생성 text *t = newText("Hello World!"); // 문자열 길이 int len = stringLength(t); if (len == 12) printf("length of '%s': %d\n", t->content, len); freeText(t); // 문자열 합치기, 이어붙이기 text *t1 = newText("apple"); text *t2 = newText(" "); text *t3 = newText("pie"); stringAppend(t1, t2); printf("%s\n", t1->content); stringAppend(t1, t3); printf("%s\n", t1->content); freeText(t1); freeText(t2); freeText(t3); // 문자열 비교 t1 = newText("abcd"); t2 = newText("abcd"); t3 = newText("abcc"); text *t4 = newText("abce"); if (stringCompare(t1, t2) == 0) printf("%s == %s\n", t1->content, t2->content); if (stringCompare(t1, t3) > 0) printf("%s > %s\n", t1->content, t3->content); if (stringCompare(t1, t4) < 0) printf("%s < %s\n", t1->content, t4->content); freeText(t1); freeText(t2); freeText(t3); freeText(t4); // 문자열 포함 여부 확인 t = newText("apple pie"); t1 = newText("apple"); t2 = newText("app"); t3 = newText("pie"); t4 = newText("play"); text *t5 = newText("pic"); if (stringFind(t, t1) == 0) printf("yes\n"); if (stringFind(t, t2) == 0) printf("yes\n"); if (stringFind(t, t3) == 6) printf("yes\n"); if (stringFind(t, t4) == -1) printf("no\n"); if (stringFind(t, t5) == -1) printf("no\n"); freeText(t); freeText(t1); freeText(t2); freeText(t3); freeText(t4); freeText(t5); return 0; } |
반응형
'C 언어 > C언어 기초' 카테고리의 다른 글
[C언어 #69] 이진탐색트리 (Binary Search Tree) (0) | 2020.11.05 |
---|---|
[C언어 #68] 트리 (tree) - 필요성 (0) | 2020.09.19 |
[C언어 #66] 동적할당 - 문자열 - 비교, 포함여부 판단 (0) | 2020.09.12 |
[C언어 #65] 동적할당 - 문자열 - 합치기/이어붙이기, 자르기 (0) | 2020.09.12 |
[C언어 #64] 동적할당 - 문자열 - 길이, 문자 반환, 문자 입력 (0) | 2020.09.12 |