[C/C++] strcpy strlen strcmp strcat _ 구현 코드

반응형
반응형

* 이번 포스팅 에서는 [C/C++] C언어 방식 문자열 포스팅에서 알아본 문자열 함수들을 직접 구현해 보도록 하겠습니다.

* 개인적인 공부 내용을 기록하는 용도로 작성한 글 이기에 잘못된 내용을 포함하고 있을 수 있습니다.

 

#1 strcpy

#2 strlen

#3 strcmp

#4 strcat


#1 strcpy

/* 
	strcpy - 문자열을 복사해주는 함수
	dest 문자열에 src 문자열을 복사합니다.
*/

void strcpy(char *dest, const char *src){
	while(*src != '\0'){ // NULL 문자열 까지 반복
		*(dest++) = *(src++); // src의 문자열을 dest로 복사
	}
	*(dest) = '\0'; // dest의 마지막 문자열 NULL로 지정
}

int main(int argc, char* argv[]){
	char dest[] = "";
	char src[] = "MyString";
	strcpy(dest, src);
	cout << "strcpy : " << dest << endl;
	return 0;
}
strcpy : MyString

 

#2 strlen

/*
	strlen - 문자열의 길이를 반환해 주는 함수
*/

int strlen(const char *src){
	int cnt = 0;
	while(*src != '\0'){ // NULL 문자열 까지 반복
		*(src++);
		cnt++; // 문자열 길이 (cnt) 증가
	}
	return cnt;
}

int main(int argc, char* argv[]){
	int len = strlen(src);
	cout << "strlen : " << len << endl;
	return 0;
}
strlen : 8

 

#3 strcmp

/* 
	strcmp - 두 문자열을 비교해 주는 함수
	문자열이 같을 경우 0을 반환,
	문자열이 다를 경우 -1을 반환합니다.
*/

int strcmp(const char *str1, const char *str2){
	
	int str1Length = strlen(str1);
	int str2Length = strlen(str2);
	if (str1Length != str2Length) { return -1; } // 문자열의 길이가 다를 경우 -1 반환
	
	while(*str1 != '\0'){ // NULL 문자열 까지 반복
		if(*str1 != *str2) { return -1; } // 중간에 서로 다른 문자가 존재할 경우 -1 반환
		*str1++, *str2++;
	} 
	
	return 0;
}

int main(int argc, char* argv[]){
	cout << "strcmp" << endl;
	char myString1[] = "NOVLOG";
	char myString2[] = "NOVLOG";
	cout << "* 문자열이 같은 경우 " << strcmp(myString1, myString2) << endl;
	
	char myString3[] = "NOVLOG";
	char myString4[] = "NOV";
	cout << "* [문자열이 다른 경우] " << strcmp(myString3, myString4) << endl;
    
	return 0;
}
strcmp
* 문자열이 같은 경우 0
* [문자열이 다른 경우] -1

 

#4 strcat

/* 
	strcat - 문자열을 이어 붙여 주는 함수
	dest 문자열에 src 문자열을 이어 붙여 줍니다.
*/

char* strcat(char *dest, const char *src){
	char *idx = dest; // dest의 첫 주소를 char 포인터에 저장
	while(*dest != '\0') { dest++; } // desd의 NULL 문자까지 포인터 증가
	while(*src != '\0') { *(dest++) = *(src++); } // src의 NULL 문자까지 포인터 증가 후 대입
	*dest = '\0'; // dest의 마지막 문자에 NULL 문자 대입
	return idx;
}

int main(int argc, char* argv[]){
	char dest2[] = "NOV";
	char src2[] = "LOG";
	strcat(dest2, src2);
	cout << "strcat : " << dest2 << endl;
	return 0;
}
strcat : NOVLOG
반응형

댓글

Designed by JB FACTORY