728x90
1. substr
함수 형태
char *my_substr(char const *s, unsigned int start, size_t len);
매개 변수
- 원본 문자열
- 문자열
s
에 있는 하위 문자열의 시작점 - 하위 문자열의 길이
반환 값
잘라낸 문자열, 실패시 NULL 반환
설명
malloc(3)를 사용하여 할당하고 문자열 's'에서 하위 문자열을 반환. 하위 문자열은 인덱스 'start'에서 시작되며 최대 크기 'len'
소스 코드
#include "libmy.h"
char *my_substr(char const *s, unsigned int start, size_t len)
{
size_t i;
size_t len_s;
char *ret;
if (!s)
return (0);
if (!(ret = (char *)malloc(sizeof(char) * len + 1)))
return (0);
len_s = my_strlen(s);
i = 0;
while (i < len && start + i < len_s)
{
ret[i] = s[start + i];
i++;
}
ret[i] = 0;
return (ret);
}
2. strjoin
함수 형태
char *my_strjoin(char const *s1, char const *s2);
매개 변수
- 접두사 문자열
- 접미사 문자열
반환 값
이어 붙인 새 문자열, 실패 시 NULL 반환
설명
malloc(3)를 할당하고 새 문자열을 반환하며, 이는 's1'과 's2'를 연결한 결과물
소스 코드
#include "libmy.h"
char *my_strjoin(char const *s1, char const *s2)
{
size_t len_s1;
size_t len_s2;
char *ret;
if (!s1 || !s2)
return (0);
len_s1 = my_strlen(s1);
len_s2 = my_strlen(s2);
if (!(ret = (char *)malloc(sizeof(char) * (len_s1 + len_s2 + 1))))
return (0);
my_memcpy(ret, s1, len_s1);
my_memcpy(ret + len_s1, s2, len_s2);
ret[len_s1 + len_s2] = 0;
return (ret);
}
반환할 메모리에 접두사 문자열을 복사하고, 그 뒤에 접미사 문자열을 복사한 후 마지막에 '\0'값을 넣는다.
3. strtrim
함수 형태
char *my_strtrim(char const *s1, char const *set);
매개 변수
- 원본 문자열
- 제거할 참조 문자열
반환 값
s1
에서 찾은 set
에 포함된 문자들을 양 끝에서 제거한 후 결과 문자열, 할당 실패 시 NULL 반환.
설명
malloc(3)를 사용하여 할당하고 문자열의 처음과 끝에서 'set'에 지정된 문자가 제거된 's1' 복사본을 반환
소스 코드
char *my_strtrim(char const *s1, char const *set)
{
size_t start;
size_t end;
char *res;
if (!s1)
return (NULL);
if (!set)
return (my_strdup(s1));
start = 0;
end = my_strlen(s1);
while (s1[start] && my_strchr(set, s1[start]))
start++;
while (s1[end - 1] && my_strchr(set, s1[end - 1]))
{
if (end - 1 < 1)
break ;
end--;
}
if (start > end)
return (my_strdup(""));
if (!(res = (char *)malloc(sizeof(char) * (end - start + 1))))
return (NULL);
my_strlcpy(res, s1 + start, end - start + 1);
return (res);
}
주의해야할 점은 원본 문자열 전체가 set에 포함되는 문자일 때이다.
우선 앞에서 문자들을 지우고, '\0''을 제외하고 뒷부분부터 탐색을 한다. 이 때 end 값이 start 보다 작아진다면 원본 문자열에 지워야할 문자를 제외하면 없다는 뜻이므로, '\0' 값을 할당하여 반환한다.
그렇지 않으면 지우고난 후 end - start + 1하여 '\0'값 포함한 길이 만큼 할당하여 결과를 복사하여 반환한다.
4. itoa
함수 형태
char *my_itoa(int n);
매개 변수
- 변환할 정수
반환 값
정수를 나타내는 문자열, 할당 실패 시 NULL 반환
설명
malloc(3)를 사용하여 할당하고 인수로 받은 정수를 나타내는 문자열을 반환한다. 음수는 반드시 처리해야 한다.
소스 코드
static int my_get_len(int n)
{
int len;
len = (n <= 0) ? 1 : 0;
while (n)
{
n /= 10;
len++;
}
return (len);
}
char *my_itoa(int n)
{
int len;
int sign;
char *ret;
long long tmp;
sign = n < 0 ? -1 : 1;
len = my_get_len(n);
if (!(ret = (char *)malloc(sizeof(char) * len + 1)))
return (NULL);
ret[len] = 0;
len--;
tmp = n < 0 ? -(long long)n : (long long)n;
while (len >= 0)
{
ret[len] = '0' + tmp % 10;
tmp /= 10;
len--;
}
if (sign == -1)
ret[0] = '-';
return (ret);
}
728x90
300x250