string 관련 함수
distance 함수
Unreal C++
str.substr(pos, count)string s{"abcde"};
cout << s.substr(1, 2); // 인덱스 1번부터 2개만 자르기 ("bc")
cout << s.substr(3) // 인덱스 3번부터 끝까지 자르기 ("de")
strtok(str, token)#include <cstring> // strtok, strcpy 등 C 문자열 함수 포함
int main() {
char str[] = "MY NAME IS TOM"; // C스타일 문자열만 가능
// 첫 호출 시 원본 문자열과 구분자 전달
char* token = strtok(str, " ");
// strtok이 NULL을 반환할 때까지 반복
while (token != NULL) {
std::cout << token << std::endl; // 잘린 토큰 출력
token = strtok(NULL, " "); // 다음 호출부턴 NULL을 인자로
}
}
cout << to_string('c'); // 99가 출력
to_string()함수는 정수 또는 실수 타입을 문자열로 변환하도록 설계되어 있어, 'c'에 해당하는 아스키코드 99가 문자열로 변환됨char ch = 'c';
string s1(1, ch); // 생성자로 생성
string s2{}, s3{};
s2.push_back(ch); // 다른 컨테이너처럼 사용 가능
s3.assign(1, ch); // assign으로 값 할당
문자열 역시 다른 컨테이너처럼 반복자를 사용할 수 있다
begin(), end()로 접근 및 수정도 가능
push_back() 사용하여 문자열 끝에 문자를 추가
insert, erase 등 여러 함수 지원
string str = "hello";
for (auto it = str.begin(); it != str.end(); ++it) {
std::cout << *it << " "; // h e l l o
}
str.push_back('!');
std::cout << str; // hello!
assign()string str;
str.assign("ABCDEFG"); // "ABCDEFG"
str.assign(3, 'x'); // "xxx"
str.assign("ABCDEFG", 2, 4); // "CDEF" (2번 인덱스부터 4글자)
string()생성자는 새로운 string 객체를 생성할 때 사용
assign()은 이미 존재하는 string 객체에 대해 내용을 바꾸는 것 (문자열 교체)
push_back은 하나의 문자를 추가, 아래의 방법들은 문자열을 추가
string(3, '!')처럼 한번에 하나의 문자를 여러 개 추가할 수 있던것과 달리 문자열은 안 되므로 추가하는 작업을 여러 번 해야함
string s{"abc"};
s = s + "de"; // (s += "de")과 동일
return s + "fgh";
append()문자열 끝에 문자열을 추가해주는 함수
+나 +=보다 좀 더 최적화됨
string s = "Hello";
s.append(" World");
s.append(3, '!'); // !를 3개 추가 -> Hello World!!!
s.append(s, 0, 5); // 자신의 앞 5글자 추가 -> Hello World!!!Hello
insert()string s = "Hello";
s.insert(5, " World"); // s = "Hello World"
s.insert(0, 3, '*'); // s = "***Hello World"
erase()string s = "Hello World";
s.erase(5, 6); // "Hello" (5번 인덱스부터 6글자 삭제)
pop_back()s = "Hello!";
s.pop_back(); // "Hello"
clear()std::string s = "Hello";
s.clear(); // ""
replace()string s = "Hello World";
s.replace(5, 6, ""); // "Hello"
str.find(key): 문자열 str에서 key를 찾아 인덱스를 반환. 못 찾으면 string::npos를 반환
str.find(key, pos): 문자열 str에서 pos위치부터 key를 찾아 인덱스를 반환. 못 찾으면 string::npos를 반환
distance(a, b)a에서 b까지의 거리
순방향 반복자와, 역방향 반복자일 때 거리 계산하는 법이 다름
using namespace ste;
int main() {
vector<int> v = {10, 20, 30, 40, 50};
auto rit1 = v.rbegin() + 1; // 역순 두 번째 원소 (40)
auto rit2 = v.rbegin() + 3; // 역순 네 번째 원소 (20)
// 역방향반복자의 경우 역방향쪽으로 거리계산
cout << distance(rit1, rit2) << endl; // 2
cout << distance(rit2, rit1) << endl; // -2
auto it1 = v.begin() + 1; // 20
auto it2 = v.begin() + 3; // 40
cout << distance(it1, it2) << endl; // 2
cout << distance(it2, it1) << endl; // -2
}

int Start = 1; // 출력할 숫자의 시작 값
int End = 30; // 출력할 숫자의 끝 값
for (int i = Start; i <= End; ++i)
{
// 숫자를 문자열(FString)로 변환
FString Number = FString::FromInt(i);
bool bIsClap = false; // "짝"을 출력할지 여부를 나타내는 플래그
// 변환된 문자열을 한 글자씩 검사
for (TCHAR Char : Number) // TCHAR를 사용해 플랫폼 독립적 문자 처리
{
// 현재 글자가 '3', '6', '9' 중 하나인지 확인
if (Char == '3' || Char == '6' || Char == '9')
{
bIsClap = true; // "짝"을 출력해야 함
break;
}
}
if (bIsClap)
{
UE_LOG(LogTemp, Warning, TEXT("clap!"));
}
else
{
UE_LOG(LogTemp, Warning, TEXT("%d"), i);
}
}
// 랜덤 숫자 범위 설정
int MinValue = 1;
int MaxValue = 100;
// 랜덤 숫자 3개 생성
int RandomNumber1 = FMath::RandRange(MinValue, MaxValue);
int RandomNumber2 = FMath::RandRange(MinValue, MaxValue);
// 합계 계산
int Sum = RandomNumber1 + RandomNumber2;
// 결과 출력
UE_LOG(LogTemp, Warning, TEXT("Numbers: %d, %d), RandomNumber1, RandomNumber2);
UE_LOG(LogTemp, Warning, TEXT("Sum of Numbers: %d"), Sum);
로그에 태그를 붙여 필터링 할 수 있게 함
보통 LogTemp를 많이 사용

중요도에 따라 로그의 색 다르게 출력
linux kernel의 KERN_DEBUG같이 flag라 보면 됨

beginPlay()함수 내에서 TextUELogExamples()를 호출해주면 됨void TestUELogExamples()
{
// 1. 일반 로그(Log) - 개발자가 디버깅을 위해 사용하는 기본 메시지
UE_LOG(LogTemp, Log, TEXT("Game has started. Player has joined the game."));
// 2. 중요 정보(Display) - 항상 표시되는 정보 메시지
FString PlayerName = TEXT("Player1");
UE_LOG(LogTemp, Display, TEXT("Welcome, %s!"), *PlayerName);
// 3. 경고(Warning) - 잠재적 문제가 있을 때 경고를 출력
int PlayerHealth = 50;
if (PlayerHealth < 100)
{
UE_LOG(LogTemp, Warning, TEXT("Low HP: %d"), PlayerHealth);
}
// 4. 오류(Error) - 실행에 영향을 줄 수 있는 문제
int AmmoCount = 0;
if (AmmoCount == 0)
{
UE_LOG(LogTemp, Error, TEXT("No ammo! "));
}
// 5. 문자열 결합 - 다양한 데이터를 한 메시지로 출력
int Score = 150;
int TimeLeft = 120;
UE_LOG(LogTemp, Log, TEXT("Score: %d, Time Left: %d seconds."), Score, TimeLeft);
// 6. 부동소수점(Floating Point) 값 출력
float PlayerSpeed = 325.5f;
UE_LOG(LogTemp, Display, TEXT("Player speed: %.2f units/sec"), PlayerSpeed);
// 7. 여러 심각도 사용 - 게임 상태에 따라 로그를 구분
bool bIsPaused = true;
if (bIsPaused)
{
UE_LOG(LogTemp, Warning, TEXT("Game is paused."));
}
else
{
UE_LOG(LogTemp, Log, TEXT("Game is running."));
}
}