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