1. 문자열의 길이를 출력하기(strlen)

int main()
{
    // [H][e][l][l][o]['\0'][][][][][][][][][][]
    const int BUF_SIZE = 100;

    char a[BUF_SIZE] = "Hello";

    int len = StrLen(a);
    
    return 0;

}

int StrLen(const char* str)
{
    int count = 0;

    while(str[count] != 0)
    {
        count++;
    }

    cout << count << endl;
}

 

2. 문자열을 복사하기(strcpy)

(1) 포인터를 이용하지 않고 작성

char* StrCpy(char* dest, char* src)
{
    int i = 0;

    while (src[i] != 0)
    {
        dest[i] = src[i];
        i++;
    }

    dest[i] = '\0';
    return dest;

    while ()
}

 

(2) 포인터를 이용하여 작성

char* StrCpy(char* dest, char* src)
{
    char* ret = dest;

    while (*src != 0)
    {
        *dest = *src;
        *dest++;
        *src++;
    }

    *dest = 0;

    return ret;
}

여기서 중요한 것은 지금 dest의 주소는 '\0'을 가리키고 있기 때문에, 원래 dest의 시작주소인 ret을 선언 해준다.

이후 ret를 리턴한다.

 

3. 문자열 덧붙이기(strcat)

(1) 포인터를 이용하지 않고 작성

char* StrCat(char* dest, char* src)
{   
    int i = 0;
    int j = 0;

    while (src[i] != 0)
    {
        i++;
    }
    // src[i]가 NULL을 가리키는 위치를 찾았음

    while (dest[j] != 0)
    {
        src[i] = dest[j];
        i++;
        j++;
    }

    src[i] = '\0';
    return src;
}

또는 이전에 만들었던 StrLen 함수를 이용하면

char* StrCat(char* dest, char* src)
{   
    int i = 0;
    int len = StrLen(dest);

    while (dest[i] != 0)
    {
        dest[len + i] = src[i];
        i++;
    }
    // src[i]가 NULL을 가리키는 위치를 찾았음

    dest[i] = '\0';
    return dest;
}

 

(2) 포인터를 이용하여 작성

char* StrCat(char* dest, char* src)
{   
    char* ret = dest;
    while (*dest != 0)
    {
        dest++;
    }
    while (*src != 0)
    {
        *dest = *src;
        dest++;
        src++;
    }
    *dest = '\0';
    return ret;
}

여기서 중요한 것은 지금 dest의 주소는 '\0'을 가리키고 있기 때문에, 원래 dest의 시작주소인 ret을 선언 해준다.

이후 ret를 리턴한다.

 

4. 문자열 비교하기(strcmp)

int StrCmp(char* a, char* b)
{
    int i = 0;

    while(a[i] != 0 || b[i] != 0)
    {
        if (a[i] > b[i])
            return 1;

        if (a[i] < b[i])
            return -1;
        i++;
    }

    return 0;
}
int main()
{
    const int BUF_SIZE = 100;

    char a[BUF_SIZE] = "Hello";
    char b[BUF_SIZE] = "Hella";

    StrCmp(a, b);
    
    return 0; 
}

 

5. 문자열을 거꾸로 뒤집기

void ReverseStr(char* str)
{
    int len = StrLen(str);

    for (int i = 0; i < (len / 2); i++)
    {
        int temp = str[i];
        str[i] = str[len - i - 1]; // null을 왼쪽으로 지나서 시작함
        str[len - i - 1] = temp;
    }
}

문자열을 절반으로 나눠서 왼쪽의 i번째 문자를 temp에 저장하고, 이후 str의 왼쪽 절반의 i번째를 '문자열 길이 - 1 번째 문자'로 교체한다.

이후 임시로 저장했던 왼쪽의 temp 값을 '문자열 길이 - 1 번째 문자'에 대입한다.

'기초 C++ 스터디 > 예제' 카테고리의 다른 글

6-6. Text RPG - OOP  (0) 2023.06.02
4-14. 달팽이 문제  (0) 2023.05.23
4-12. Text RPG 만들기(2)  (0) 2023.05.23
4-8. 로또 번호 생성기  (0) 2023.05.22
4-3. 포인터 실습  (0) 2023.05.11