반응형
* 이번 포스팅 에서는 [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
반응형
'Archive2 > C&C++' 카테고리의 다른 글
[C/C++] 포인터와 const (feat. const 키워드의 위치에 따른 차이점) (0) | 2022.02.02 |
---|---|
[C/C++] 포인터란? _ * & nullptr (0) | 2022.01.27 |
[C/C++] C언어 방식 문자열 (C-Style-Strings) _ strlen strcpy strcat strcmp (0) | 2022.01.25 |
[C/C++] Array 배열을 함수의 매개변수로 사용 시 주의점 (0) | 2022.01.06 |
[C++] 모호성(Ambiguity) _ Using (0) | 2022.01.04 |