[정답] 73. 정리하기 (문자열)

1. 문자열 길이를 구하는 함수를 만드시오.
(strlen 함수와 같은 기능을 하는 함수 만들기)


답:

//문자열 길이를 구하는 함수를 만드시오.
//(strlen 함수와 같은 기능을 하는 함수 만들기)
 
#include <string.h>
#include <stdio.h>
int mystrlen(const char *str);
int main(void)
{
    char arr[100];
    printf("문장 입력:");
    gets_s(arr, sizeof(arr));
    printf("<mystrlen 함수 이용>%s string length:%d\n", arr, mystrlen(arr));
    printf("<strlen 함수 이용>%s string length:%d\n", arr, strlen(arr));
    return 0;
}
int mystrlen(const char *str)
{
    const char *tstr = str;
    while (*str++);//참인 문자면 반복
    return str - tstr -1; //종료 문자가 있는 주소에서 원래 주소의 차 -1이 문자열 길이
}

2. 문자열 비교하는 함수를 만드시오.
(strcmp 함수와 같은 기능을 하는 함수 만들기)
답변:

//문자열 비교하는 함수를 만드시오.
//(strcmp 함수와 같은 기능을 하는 함수 만들기)
 
#include <stdio.h>
#include <string.h>
 
int mystrcmp(const char *str1, const char *str2);
void TestCase(const char *str1, const char *str2);
int main(void)
{
    char arr1[10] = "hello";
    char arr2[10] = "yahoo";
    char arr3[10] = "hello";
    
    TestCase(arr1, arr2);
    TestCase(arr1, arr3);
    TestCase(arr2, arr3);
    return 0;
}
void TestCase(const char *str1, const char *str2)
{
    int gap;
    gap = mystrcmp(str1, str2);
    if (gap == 0)
    {
        printf("%s와 %s는 서로 같음\n",str1,str2);
    }
    else
    {
        if (gap > 0)
        {
            printf("%s가 %s보다 사전식 비교에서 큽니다.\n", str1, str2);
        }
        else
        {
            printf("%s가 %s보다 사전식 비교에서 작습니다.\n", str1, str2);
        }
    }
}
int mystrcmp(const char *str1, const char *str2)
{
    while (*str1 && (*str1++ == *str2++));
    return *str1 - *str2;
}

3. 문자열 복사하는 함수를 만드시오.
(strcpy_s 함수와 같은 기능을 하는 함수 만들기)
답:

//문자열 복사하는 함수를 만드시오.
//(strcpy_s 함수와 같은 기능을 하는 함수 만들기)
 
 
#include <stdio.h>
#include <string.h>
#include <assert.h>
 
char *mystrcpy_s(char *dest, size_t size, const char *src);
int main(void)
{
    char name[10] = "hello";
    char name2[10];
 
    mystrcpy_s(name2, sizeof(name2), name);
    printf("%s\n", name2);
    return 0;
}
 
char *mystrcpy_s(char *dest, size_t size, const char *src)
{
    char *temp = dest;
    if (strlen(src) >= size)//src문자열 길이가 size보다 크거나 같으면
    {
        assert(0);//예외 창 띄우기
    }
    while (*dest++ = *src++);
    return temp;
}