반응형

포인터를 이용하여 직접 구현을 해보자.




소스 코드 : 


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
#include <iostream>
 
int _strlen(char *str) {
    int len = 0;
    while (str[++len]);
    return len;
}
 
void _strcpy(char *src, char *dest) {
    
    //while (*dest++ = *src++);
    int i = 0;
    while (dest[i] = src[i++]);
}
 
void _change(char *src) {
    src[0= 'z';
}
int _strcmp(char *s1, char *s2) {
    int i = 0;
    while (s1[i]) {
        if (s1[i] != s2[i])
            break;
        i++;
    }
 
    return s1[i] - s2[i];
}
int main() {
    char src[100= "abcd";
    char dest[100= "abb";
 
    printf("cmp : %d\n", _strcmp(src, dest));
    printf("len : %d\n", _strlen(src));
    _strcpy(src, dest);
    printf("dest : %s\n", dest);
    _change(dest);
    printf("dest : %s\n", dest);
 
    return 0;
}
cs

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
#include <iostream>
#include <cstdio>
 
using namespace std;
 
/*
strcpy
dest에 src 문자열을 복사하는 함수
return
-
*/
void _strcpy(char *dest, char *src)
{
    while (*src != '\0')
        *(dest++= *(src++);
    *(dest) = '\0';
}
/*
strlen
문자열 input의 길이를 반환
return
input 길이
*/
int _strlen(char *input)
{
    int i = 0;
    while (input[i] != '\0')
        i++;
 
    return i;
}
 
/*
strcmp
str1과 str2를 비교해주는 비교 함수
return
-1  : str1이 사전상 앞선다.
0 : str1과 str2는 같은 문자열
1  : str1이 사전상 늦다.
*/
int _strcmp(const char *str1, const char *str2)
{
    int lStr1 = _strlen((char *)str1);
    int lStr2 = _strlen((char *)str2);
 
    while (*str1 != '\0')
    {
        if (*str1 > *str2)
            return 1;
        else if (*str1 < *str2)
            return -1;
 
        str1++, str2++;
    }
    if (lStr2 > lStr1)
        return 1;
 
    return 0;
}
int main()
{
    char src[4= "def";
    char dest[4];
 
    _strcpy(dest, src);
 
    cout << _strlen(dest) << endl;
    cout << _strcmp(dest, "deff");
 
    return 0;
}
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus


반응형

'Basic > C' 카테고리의 다른 글

부동소수점을 피해야 하는 이유  (0) 2023.11.23
atoi, itoa, stoi, itos 구현  (0) 2018.01.31
scanf를 자유자제로 이용해보기  (2) 2017.04.18
Dangling pointer  (0) 2016.05.31
if else로 범할 수 있는 오류  (0) 2016.03.24