함수구현

민우이·2022년 5월 1일

#include
#include <string.h>
//strcpy
char my_strcpy(char dest, const char src)
{
char
ret = dest;
while ((dest++ = src++) != 0) {}

return ret;

}
//strcat
char my_strcat(char d, const char s)
{
char
p = d;
while (d) d++;
while (
s) d++ = s++;
*d = '\0';
return p;
}

//strlen
int my_strlen(char* arr) {
int cnt = 0;
int index = 0;

while (1) {
    if (arr[index] == '\0') {
        break;
    }
    else {
        cnt++;
    }
    index++;
}

return cnt;

}

int main() {

//Please Enter Your Code Here
char arr[100];
scanf("%s", arr); //gets(myString);

printf("문자열 길이 : %d", my_strlen(arr));

return 0;

}
//strcmp
int my_strcmp(char str1, char str2)
{
int i = 0;
// 한쪽 문자열이 끝날 때까지 비교 수행
while (str1[i] != '\0' || str2[i] != '\0') {
// 문자 같으면 계속 비교
if (str1[i] == str2[i]) {
i++;
continue;
}

   // 앞의 문자가 더 크면 1 리턴
   else if (str1[i] > str2[i])return 1;
   
   // 뒤의 문자가 더 크면 -1 리턴 
   else if (str1[i] < str2[i])return -1;
   
   i++;

}

// 어느 한쪽 문자열이 끝났고 i - 1 까지 모두 같은 상태
if (str1[i] == str2[i])return 0; // str1[i] == str2[i] == '\0' 이라면 0 리턴
else if (str1[i] != '\0')return 1; // str1에 글자가 남아있으면 1 리턴
else return -1;	// str2에 글자가 남아있으면 -1 리턴

}
//strchr

char strchr(const char s, int c)
{
/*
s 문자열의 처음 문자부터 c 문자와 같지 않으면
루프를 계속 돕니다.
같으면 루프를 종료하고 현재 s의 위치를 리턴합니다.
/
for (; s != (char)c; ++s)
if (
s == '\0')
return NULL;
return (char*)s;
}

//strstr

char strstr(const char s1, const char s2)
{
size_t l1, l2;

l2 = strlen(s2);

/* s2 문자열의 길이가 0이라면 무조건 매칭으로 보고 s1의 시작주소를 반환합니다. */
if (!s2)
    return (char*)s1;

l1 = strlen(s1);
/* 남은 l1의 길이가 l2 길이 보다 작다면, 비교할 의미가 없으므로 NULL을 리턴합니다. */
while (l1 >= l2) {
    l1--;
    /*
     * s1의 포인터 위치를 이동하면서,
     * 현재 s1과 s2의 메모리를 s2의 사이즈만큼 비교합니다.
     * 같으면 현재 s1의 포인터를 리턴합니다.
     */
    if (!memcmp(s1, s2, l2))
        return (char*)s1;
    s1++;
}
return NULL;

}

int main()
{
char p_src_str = "abcdefg", p_find_str = "cde";
// 'abcdefg' 문자열에서 'cde' 문자열을 찾는다.
char* p_pos = strstr(p_src_str, p_find_str);

if (p_pos != NULL) {  // 성공적으로 찾았다면!
    printf("기준 문자열 : %s\n", p_src_str);
    printf("찾을 문자열 : %s\n", p_find_str);
    printf("찾은 위치 : %s\n", p_pos);
}
else {    // 문자열 찾기에 실패한 경우!
    printf("%s 문자열을 찾을수 없습니다!\n", p_find_str);
}
return 0;

}

//strrchr
char strrchr(const char s, int c)
{
const char last = NULL;
/

s 문자열을 순차적으로 돌면서 c와 같은 문자가 있으면 last에 기록합니다.
NULL이 아닐때까지 계속 돌아서 마지막 c와 같은 문자를 찾습니다.
마지막으로 찾은 c와 같은 문자의 위치를 리턴합니다.
/
do {
if (s == (char)c)
last = s;
} while (
s++);
return (char*)last;
}

0개의 댓글