반응형
포인터를 이용하여 직접 구현을 해보자.
소스 코드 :
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 |