연습문제 (문자열) #1

CJB_ny·2022년 8월 8일
0

C++ 정리

목록 보기
42/95
post-thumbnail

왜 사용하는가?

c 스타일 문자열 길이 구하는 법

sizeof(a) => 100나온다.

(나중에는 cpp String 사용할 꺼임)

strlen(a); 사용을 하면 실제 사용하는 크기만을 나타내준다.

1. strlen 구현

int StrLen(const char* str)
{
	int index = 0;
	
	while (*(str + index) != '\0')
	{
		++index;
	}

	return index;
}

2. 문자열 복사 함수❗❗

strcpy() 라는 함수로 dest, source 인자로 받는다.

그런데 이거 오래된 구닥다리 버젼이라

복사는 애랑 복사당하는 애랑 크기 않맞으면 다른 메모리 오염시킴

그래서 strcpy_s 버젼이 있다.

void StrCpy(char* dest, char* src)
{
	int srcLen = StrLen(src);

	for (int i = 0; i < srcLen; ++i)
		*(dest + i) = *(src + i);
}

이렇게 했는데 빼먹은게 있다!

void StrCpy(char* dest, char* src)
{
	int srcLen = StrLen(src);

	for (int i = 0; i < srcLen; ++i)
		*(dest + i) = *(src + i);
        
    	*(dest + srcLen) = '\0'; 이거없으면 어디가 끝인지 알 수 없다.
}

8번째 인덱스 '\n' 까지 들어가야한다.

++ 연산 👍👍👍

또는

++ 반환이 참조이기 때문에

이렇게도 가능함.

3. strcat 함수 구현 (복사)

char* StrCat(char* dest, char* src)
{
	int srcLen = StrLen(dest);
	int index = 0;

	for (; index < srcLen; ++index)
		*(dest + (srcLen + index)) = *(src + index);
	
	*(dest + index + srcLen) = '\0';

	return dest;
}
char* StrCat2(char* dest, char* src)
{
	while (*dest != '\0')
	{
		++dest;
	}
	while (*src != '\0')
	{
		*dest = *src;
		++dest;
		++src;
	}

	return dest;
}

이거 또는
char* StrCat2(char* dest, char* src)
{
	char* ret = dest;
    
	while (*dest != '\0')
		++dest;
	
	while (*src != '\0')
		*dest++ = *src++;
	
	return ret;
}

// 이렇게 가능.
profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글