카테고리 없음

문자열 함수에 대해

휘성티비 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));
}

문자열 함수를 만들어보면서 포인터에 대한 이해를 높일 수 있었고 응용이 쉬워졌다.