카테고리 없음
문자열 함수에 대해
휘성티비
2024. 6. 20. 22:23
오늘은 C언어의 문자열 함수에 대해 다뤄보겠습니다.
strcpy, strcat, strcmp, strstr, atoi에 대해 가볍게 정의를 풀고 함수를 구현해볼게요.
이 함수들은 <string.h> 헤더파일 안에 들어있습니다(atoi는 <stdlib.h>).
strcpy - 문자열을 복사, 복사받는 문자열의 크기가 작을 경우 오류 발생
#include <stdio.h>
char my_strcpy(char* str2, char* str1) {
char* res_str2 = str2;
while (*str1 != '\0') {
*str2++ = *str1++;
}
*str2 = '\0';
return *res_str2;
}
int main() {
char str1[20] = "HelloWorld";
char str2[20];
my_strcpy(str2, str1);
printf("%s", str2);
return 0;
}
strcat - 문자열을 연결한다. 첫 번째 인자로 들어온 문자열에 붙이기 때문에 충분한 크기가 확보되어야 한다.
#include <stdio.h>
char my_strcat(char* str1, char* str2) {
while (*str1 != '\0') {
str1++;
}
while (*str2 != '\0') {
*str1++ = *str2++;
}
*str1 = '\0';
return *str1;
}
int main() {
char str1[100] = "abcdefg";
char str2[] = "hijklmop";
my_strcat(str1, str2);
printf("%s", str1);
return 0;
}
strcmp - 문자열의 크기를 비교한다. 아스키코드 값이 기준이다. 같으면 0을 반환, 두 번째 인자가 더 크면 음수, 반대는 양수 반환
#include <stdio.h>
int my_strcmp(char* str1, char* str2) {
while (*str1 != '\0' || *str2 != '\0') {
if (*str1 > *str2)
return 1;
else if (*str1 < *str2)
return -1;
else {
str1++;
str2++;
}
}
return 0;
}
int main() {
char str1[] = "aaa";
char str2[] = "aab";
char str3[] = "acc";
printf("%d\n", my_strcmp(str1, str2));
printf("%d\n", my_strcmp(str1, str3));
return 0;
}
strstr - 문자열 속 부분 문자열을 찾음, 부분 문자열이 시작되는 부분부터 반환
#include <stdio.h>
int my_strlen(char* str) {
int length = 0;
while (*str++ != '\0') { length++; }
return length;
}
char* my_strstr(char* dest, char* str) {
int found = 0;
char* ret = dest;
if (my_strlen(str) == 0)
return dest;
while (*dest != '\0') {
if (*dest == *str) {
char* s1 = dest;
char* s2 = str;
while (*s1 == *s2 && *s2 != 0) {
s1++;
s2++;
}
if (*s2 == 0) {
found = 1;
break;
}
}
dest++;
}
if (found) ret = dest;
else ret = NULL;
return ret;
}
int main() {
char dest[100] = "CAT-Security";
char str[100] = "uri";
char* pch = my_strstr(dest, str);
printf("%s", pch);
return 0;
}
#include <stdio.h>
int my_atoi(char* str) {
int* n = NULL;
int res_n = 0;
while (*str != '\0') {
res_n += *str - '0';
res_n *= 10;
str++;
}
return res_n;
}
int main() {
char str[100] = "92938483";
printf("%d", my_atoi(str));
}
문자열 함수를 만들어보면서 포인터에 대한 이해를 높일 수 있었고 응용이 쉬워졌다.