반응형

c언어 동적할당 - 문자열 - 문자열 길이, 문자열의 문자 반환, 문자열에 문자 입력

 

[C언어 #63] 동적할당 - 문자열 생성

 

 

문자열 길이

void stringCopy(char *str1, char *str2) {
    int len = stringLength(str2);
    for (int i = 0; i < len; i++) str1[i] = str2[i];
    str1[len] = '\0';
}
 

 

 

문자열의 문자 얻기

// 문자배열의 문자 
char get(text *t, int i) {
    return t->content[i];
}
 

 

 

문자열에 문자 입력/대체

// 문자열에 문자 
void set(text *t, int i, char c) {
    t->content[i] = c;
}
 

 

 

 

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
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
 
struct text {
    int capacity;
    char *content;
};
 
typedef struct text text;
 
int stringLength(char *str) {
    int len = 0;
    for (int i = 0; str[i] != '\0'; i++) len++;
    return len;
}
 
void stringCopy(char *str1, char *str2) {
    int len = stringLength(str2);
    for (int i = 0; i < len; i++) str1[i] = str2[i];
    str1[len] = '\0';
}
 
text *newText(char *str) {
    text *= malloc(sizeof(text));
    t->capacity = 24;
    while(stringLength(str) + 1 > t->capacity) t->capacity *= 2;
    t->content = malloc(t->capacity);
    stringCopy(t->content, str);
    return t;
}
 
void freeText(text *t) {
    free(t->content);
    free(t);
}
 
char get(text *t, int i) {
    return t->content[i];
}
 
void set(text *t, int i, char c) {
    t->content[i] = c;
}
 
int main() {
    // text 구조체 생성
    text *= newText("Hello World!");
 
    // 문자열 길이
    int len = stringLength(t->content);
    if (len == 12printf("length of '%s': %d\n", t->content, len);
 
    // 문자열의 문자 반환
    for (int i = 0; i < stringLength(t->content); i++printf("%c", get(t, i));
    printf("\n");
 
    // 문자열에 문자 입력
    set(t, 6'J');
    set(t, 7'u');
    set(t, 8'm');
    set(t, 9'b');
    set(t, 10'o');
    printf("%s\n", t->content);
 
    // 메모리 할당 해제
    freeText(t);
 
    return 0;
}
 

 

 

 

반응형