본문 바로가기
알고리즘

PS시 자주 사용하는 함수 모음

by 까망 하르방 2021. 2. 28.
반응형

strlen() 문자열의 길이 반환

int strlen(const char*s, int len = 0){
    while (s[len]) len++;
    return len;

}

 

strcmp() 문자열 대소 비교

int strcmp(const char*s, const char*t){
    while (*s && *s == *t) s++, t++;
    return *s - *t;
}

 

strcpy() 문자열 복사

void strcpy(char*dest, const char*src){
    while (*dest++ = *src++);
}

 

문자열 Hash

unsigned long djb2(const char* str)
{
    unsigned long hash = 5381;
    int c;
    while (c = *str++) 
    {
        hash = (((hash << 5) + hash) + c) % TABLE_SIZE;
    }
    return hash % TABLE_SIZE;
}

 

대소문자 확인

int isupper(char c){return c >= 'A' && c <= 'Z';}
int islower(char c){return c >= 'a' && c <= 'z';}

 

Merge Sort

const int STRLEN = 10;
const int N = 10;
int strcmp(const char* s, const char* t) {
    while (*s && *s == *t) s++, t++;
    return *s - *t;
}

struct member {
    char name[STRLEN];
    bool operator <(const member& target) const {
        // 사전순 정렬
        if (strcmp(name, target.name) > 0)
            return true;
        return false;
    }
} temp[N], arr[N];

void mergeSort(member* arr, int start, int end) {
    if (start >= end) return;

    // 1. divide
    int mid = (start + end) / 2;

    // 2. conquer
    mergeSort(arr, start, mid);
    mergeSort(arr, mid + 1, end);

    // 3. merge
    int i = start, j = mid + 1, k = start;
    while (i <= mid && j <= end) {
        if (arr[i] < arr[j])
            temp[k++] = arr[i++];
        else
            temp[k++] = arr[j++];
    }
    while (i <= mid) temp[k++] = arr[i++];
    while (j <= end) temp[k++] = arr[j++];

    // 4. copy
    for (i = start; i <= end; ++i) {
        arr[i] = temp[i];
    }
}

 

 

 

 

반응형

댓글