1. 문자열의 길이를 출력하기(strlen)
int main()
{
// [H][e][l][l][o]['\0'][][][][][][][][][][]
const int BUF_SIZE = 100;
char a[BUF_SIZE] = "Hello";
int len = StrLen(a);
return 0;
}
int StrLen(const char* str)
{
int count = 0;
while(str[count] != 0)
{
count++;
}
cout << count << endl;
}
2. 문자열을 복사하기(strcpy)
(1) 포인터를 이용하지 않고 작성
char* StrCpy(char* dest, char* src)
{
int i = 0;
while (src[i] != 0)
{
dest[i] = src[i];
i++;
}
dest[i] = '\0';
return dest;
while ()
}
(2) 포인터를 이용하여 작성
char* StrCpy(char* dest, char* src)
{
char* ret = dest;
while (*src != 0)
{
*dest = *src;
*dest++;
*src++;
}
*dest = 0;
return ret;
}
여기서 중요한 것은 지금 dest의 주소는 '\0'을 가리키고 있기 때문에, 원래 dest의 시작주소인 ret을 선언 해준다.
이후 ret를 리턴한다.
3. 문자열 덧붙이기(strcat)
(1) 포인터를 이용하지 않고 작성
char* StrCat(char* dest, char* src)
{
int i = 0;
int j = 0;
while (src[i] != 0)
{
i++;
}
// src[i]가 NULL을 가리키는 위치를 찾았음
while (dest[j] != 0)
{
src[i] = dest[j];
i++;
j++;
}
src[i] = '\0';
return src;
}
또는 이전에 만들었던 StrLen 함수를 이용하면
char* StrCat(char* dest, char* src)
{
int i = 0;
int len = StrLen(dest);
while (dest[i] != 0)
{
dest[len + i] = src[i];
i++;
}
// src[i]가 NULL을 가리키는 위치를 찾았음
dest[i] = '\0';
return dest;
}
(2) 포인터를 이용하여 작성
char* StrCat(char* dest, char* src)
{
char* ret = dest;
while (*dest != 0)
{
dest++;
}
while (*src != 0)
{
*dest = *src;
dest++;
src++;
}
*dest = '\0';
return ret;
}
여기서 중요한 것은 지금 dest의 주소는 '\0'을 가리키고 있기 때문에, 원래 dest의 시작주소인 ret을 선언 해준다.
이후 ret를 리턴한다.
4. 문자열 비교하기(strcmp)
int StrCmp(char* a, char* b)
{
int i = 0;
while(a[i] != 0 || b[i] != 0)
{
if (a[i] > b[i])
return 1;
if (a[i] < b[i])
return -1;
i++;
}
return 0;
}
int main()
{
const int BUF_SIZE = 100;
char a[BUF_SIZE] = "Hello";
char b[BUF_SIZE] = "Hella";
StrCmp(a, b);
return 0;
}
5. 문자열을 거꾸로 뒤집기
void ReverseStr(char* str)
{
int len = StrLen(str);
for (int i = 0; i < (len / 2); i++)
{
int temp = str[i];
str[i] = str[len - i - 1]; // null을 왼쪽으로 지나서 시작함
str[len - i - 1] = temp;
}
}
문자열을 절반으로 나눠서 왼쪽의 i번째 문자를 temp에 저장하고, 이후 str의 왼쪽 절반의 i번째를 '문자열 길이 - 1 번째 문자'로 교체한다.
이후 임시로 저장했던 왼쪽의 temp 값을 '문자열 길이 - 1 번째 문자'에 대입한다.
'기초 C++ 스터디 > 예제' 카테고리의 다른 글
6-6. Text RPG - OOP (0) | 2023.06.02 |
---|---|
4-14. 달팽이 문제 (0) | 2023.05.23 |
4-12. Text RPG 만들기(2) (0) | 2023.05.23 |
4-8. 로또 번호 생성기 (0) | 2023.05.22 |
4-3. 포인터 실습 (0) | 2023.05.11 |