#include
#include <string.h>
//strcpy
char my_strcpy(char dest, const char src)
{
char ret = dest;
while ((dest++ = src++) != 0) {}
return ret;
}
//strcat
char my_strcat(char d, const char s)
{
char p = d;
while (d) d++;
while (s) d++ = s++;
*d = '\0';
return p;
}
//strlen
int my_strlen(char* arr) {
int cnt = 0;
int index = 0;
while (1) {
if (arr[index] == '\0') {
break;
}
else {
cnt++;
}
index++;
}
return cnt;
}
int main() {
//Please Enter Your Code Here
char arr[100];
scanf("%s", arr); //gets(myString);
printf("문자열 길이 : %d", my_strlen(arr));
return 0;
}
//strcmp
int my_strcmp(char str1, char str2)
{
int i = 0;
// 한쪽 문자열이 끝날 때까지 비교 수행
while (str1[i] != '\0' || str2[i] != '\0') {
// 문자 같으면 계속 비교
if (str1[i] == str2[i]) {
i++;
continue;
}
// 앞의 문자가 더 크면 1 리턴
else if (str1[i] > str2[i])return 1;
// 뒤의 문자가 더 크면 -1 리턴
else if (str1[i] < str2[i])return -1;
i++;
}
// 어느 한쪽 문자열이 끝났고 i - 1 까지 모두 같은 상태
if (str1[i] == str2[i])return 0; // str1[i] == str2[i] == '\0' 이라면 0 리턴
else if (str1[i] != '\0')return 1; // str1에 글자가 남아있으면 1 리턴
else return -1; // str2에 글자가 남아있으면 -1 리턴
}
//strchr
char strchr(const char s, int c)
{
/*
s 문자열의 처음 문자부터 c 문자와 같지 않으면
루프를 계속 돕니다.
같으면 루프를 종료하고 현재 s의 위치를 리턴합니다.
/
for (; s != (char)c; ++s)
if (s == '\0')
return NULL;
return (char*)s;
}
//strstr
char strstr(const char s1, const char s2)
{
size_t l1, l2;
l2 = strlen(s2);
/* s2 문자열의 길이가 0이라면 무조건 매칭으로 보고 s1의 시작주소를 반환합니다. */
if (!s2)
return (char*)s1;
l1 = strlen(s1);
/* 남은 l1의 길이가 l2 길이 보다 작다면, 비교할 의미가 없으므로 NULL을 리턴합니다. */
while (l1 >= l2) {
l1--;
/*
* s1의 포인터 위치를 이동하면서,
* 현재 s1과 s2의 메모리를 s2의 사이즈만큼 비교합니다.
* 같으면 현재 s1의 포인터를 리턴합니다.
*/
if (!memcmp(s1, s2, l2))
return (char*)s1;
s1++;
}
return NULL;
}
int main()
{
char p_src_str = "abcdefg", p_find_str = "cde";
// 'abcdefg' 문자열에서 'cde' 문자열을 찾는다.
char* p_pos = strstr(p_src_str, p_find_str);
if (p_pos != NULL) { // 성공적으로 찾았다면!
printf("기준 문자열 : %s\n", p_src_str);
printf("찾을 문자열 : %s\n", p_find_str);
printf("찾은 위치 : %s\n", p_pos);
}
else { // 문자열 찾기에 실패한 경우!
printf("%s 문자열을 찾을수 없습니다!\n", p_find_str);
}
return 0;
}
//strrchr
char strrchr(const char s, int c)
{
const char last = NULL;
/
s 문자열을 순차적으로 돌면서 c와 같은 문자가 있으면 last에 기록합니다.
NULL이 아닐때까지 계속 돌아서 마지막 c와 같은 문자를 찾습니다.
마지막으로 찾은 c와 같은 문자의 위치를 리턴합니다.
/
do {
if (s == (char)c)
last = s;
} while (s++);
return (char*)last;
}