C String.h 함수 구현 - strlen,strcpy,strcat,strcmp,strchr,strstr


int my_strlen(char *str){
    int len=-1;
    while(str[++len] != '\0');
    return len;
}
char* my_strcpy(char* cpystr,const char* str){
    int len=-1;
    while(str[++len]!= '\0'){
        cpystr[len] = str[len];
    }
    cpystr[len] = '\0';
    return cpystr;
}
char* my_strcat(char* catstr,const char* str){
    int len=-1,i=-1;
    while(catstr[++len] != '\0');
    while(str[++i] != '\0'){
        catstr[len++] = str[i];
    }   
    catstr[len] = '\0';
    return catstr;
}
int my_strcmp(const char* cmpstr1, const char* cmpstr2){
    int flag=0,len1=-1,len2=-1;
    while(cmpstr1[++len1] != '\0');
    while(cmpstr2[++len2] != '\0');

    if(len1 > len2)
        return 1;
    else if(len1 < len2)
        return -1;
    else{
        for(len2=0;len2<len1;len2++){
            if(cmpstr1[len2] > cmpstr2[len2])
                return 1;
            else if(cmpstr1[len2] < cmpstr2[len2])
                return -1;
        }
    } 
    return 0;
}
char* my_strchr(const char* str,const char ch){
    int i=0;
    do{
        if(str[i] == ch)
            return (str+i);
    }while(str[i++] != '\0');
    return 0;
}
char* my_strstr(const char* str1,const char* str2){
    int i=0, str2len=-1;
    int tempi,tempj;

    while(str2[++str2len] != '\0');

    do{
        if(str1[i] == str2[0]){
            if(str2len == 1)
                return str1+i;
            else{
                tempi = i;tempj = 0;
                while(str1[++tempi] == str2[++tempj]){
                    if(tempj == str2len-1)
                        return (str1+i);
                }
            }
        }
    }while(str1[i++] != '\0');
    return 0;
}

<남들은 이해안가는 나만의 알고리즘 풀이>

strcmp함수의 경우 알고리즘은

- 1 - 길이 비교해서 긴 문자열이 큰 문자열로 지정

- 2 - (길이가 같다면) 0번쨰 배열부터 서로 비교해서 한쪽이 더 높은 문자면 그 문자열이 큰 문자열로 지정

- 3 - 문자열의 요소가 모두 같다면 값이 같은 문자열로 지정

strstr함수는

- 1 - 검색하려는 문자열의 길이를 알아내고

- 2 - while문으로 검색받는 문자열의 null을 만날때까지 (먼저) 검색문자열의 첫 요소를 검색받는 문자열의 요소와 비교 검색해 나갑니다.

- 3 - 문자열에서 검색문자열의 첫 요소와 같은 값을 찾았으면 검색문자열과 같을수 있는것으로 보고 검색해 들어갑니다.(만약 검색문자열의 길이가 1이면 바로 주소 출력)검색 문자열과 모두 값이 같으면 주소출력 아니면 처음 같은값은 찾은 문자열부터 다시 검색.


글이 도움이 되셨거나 마음에 드셨다면
댓글을 꼭 남겨주세요.
댓글 하나하나에 힘이 난답니다!^^