언어 자료구조 알고리즘/디딤돌 C언어

[정답] 디딤돌 C언어 73. 문자열 정리하기

언제나휴일 2016. 5. 1. 08:27
반응형

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


문자열

68. 문자열

69. 문자열 사용 기초

70. 문자열 길이와 strlen 함수

71. 문자열 비교와 strcmp 함수

72. 문자열 복사



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;
}



반응형