반응형
c언어 동적할당 - 문자열 - 문자열 비교, 문자열 포함여부 판단
[C언어 #64] 동적할당 - 문자열 - 길이, 문자 반환, 문자 입력
[C언어 #65] 동적할당 - 문자열 - 합치기/이어붙이기, 자르기
문자열 비교
int stringCompare(char *s, char *t) {
int i;
for (i = 0; s[i] != '\0'; i++)
if (s[i] != t[i]) break;
int cmp = s[i] - t[i];
return cmp;
}
int compare(text *t1, text *t2) {
return stringCompare(t1->content, t2->content);
}
|
문자열 포함여부 - 문자열을 포함할 경우 해당 문자열의 시작점 반환
int stringFind(char *t1, char *t2) {
int i;
bool ok;
for (i = 0; t1[i] != '\0' && !ok; i++) {
ok = true;
for (int j = 0; t2[j] != '\0' && ok; j++) {
if (t1[i + j] != t2[j]) ok = false;
}
}
return ok ? i - 1 : -1;
}
int find(text *t1, text *t2) {
return stringFind(t1->content, t2->content);
}
|
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
|
#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 *t = 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);
}
int stringCompare(char *s, char *t) {
int i;
for (i = 0; s[i] != '\0'; i++)
if (s[i] != t[i]) break;
int cmp = s[i] - t[i];
return cmp;
}
int compare(text *t1, text *t2) {
return stringCompare(t1->content, t2->content);
}
int stringFind(char *t1, char *t2) {
int i;
bool ok;
for (i = 0; t1[i] != '\0' && !ok; i++) {
ok = true;
for (int j = 0; t2[j] != '\0' && ok; j++) {
if (t1[i + j] != t2[j]) ok = false;
}
}
return ok ? i - 1 : -1;
}
int find(text *t1, text *t2) {
return stringFind(t1->content, t2->content);
}
int main() {
// 문자열 비교
text *t1 = newText("abcd");
text *t2 = newText("abcd");
text *t3 = newText("abcc");
text *t4 = newText("abce");
if (compare(t1, t2) == 0) printf("%s == %s\n", t1->content, t2->content);
if (compare(t1, t3) > 0) printf("%s > %s\n", t1->content, t3->content);
if (compare(t1, t4) < 0) printf("%s < %s\n", t1->content, t4->content);
freeText(t1);
freeText(t2);
freeText(t3);
freeText(t4);
// 문자열 포함 여부 확인
text *t = newText("apple pie");
t1 = newText("apple");
t2 = newText("app");
t3 = newText("pie");
t4 = newText("play");
text *t5 = newText("pic");
if (find(t, t1) == 0) printf("yes\n");
if (find(t, t2) == 0) printf("yes\n");
if (find(t, t3) == 6) printf("yes\n");
if (find(t, t4) == -1) printf("no\n");
if (find(t, t5) == -1) printf("no\n");
return 0;
}
|
cs |
반응형
'C 언어 > C언어 기초' 카테고리의 다른 글
[C언어 #68] 트리 (tree) - 필요성 (0) | 2020.09.19 |
---|---|
[C언어 #67] 동적할당 - 문자열 - string.h 활용 (0) | 2020.09.15 |
[C언어 #65] 동적할당 - 문자열 - 합치기/이어붙이기, 자르기 (0) | 2020.09.12 |
[C언어 #64] 동적할당 - 문자열 - 길이, 문자 반환, 문자 입력 (0) | 2020.09.12 |
[C언어 #63] 동적할당 - 문자열 - 문자열 생성 (0) | 2020.09.11 |