[언리얼 엔진] 문자열 FString

    문자열 FString

    언리얼 엔진(Unreal Engine)에는 FString, FName, FText의 문자열 클래스가 존재한다.
    그 중 FString은 조작이 가능한 유일한 클래스이다.

    변환

    //FString 선언
    FString TestString = FString(TEXT("My String"));
    
    //다른 문자열 클래스로 변환
    //----------------------------------
    //FString에서 FName으로
    //FName은 대소문자를 구분하지 않기 때문에 손실될 위험이 있다
    FName TestName = FName(*TestString);
    
    //FString에서 FText로
    //FText의 자동 현지화(auto localization)의 혜택을 받지 못한다
    FText TestText = FText::FromString(TestString);
    
    
    //다른 문자열 클래스에서 변환
    //----------------------------------
    //FName에서 FString으로
    TestString = TestName.ToString();
    
    //FText에서 FString으로
    //이 변환은 일부 언어에서 손실될 위험이 있다.
    TestString = TestText.ToString();
    
    //숫자 및 기타변수에서 변환
    FString floatStr    = FString::SanitizeFloat(FloatValue);
    FString IntStr      = FString::FromInt(IntValue);    //int32 타입
    FString BoolStr     = BoolValue ? TEXT("true") : TEXT("false");
    FString VectorStr   = VectorValue.ToString();   //"X= Y= Z=" 의 형태
    FString Vector2DStr = Vec2dValue.ToString();    //"X= Y=" 의 형태
    FString RotStr      = RotatorValue.ToString();  //"P= Y= R=" 의 형태
    FString ColorStr    = LinearColorValue.ToString();  // "(R=,G=,B=,A=)" 의 형태
    FString ObjStr      = UObjValue->GetName().ToString();  //UObject의 FName
    
    //숫자나 bool변수로 변환
    bool TestBool       = TestString.ToBool();
    int32 TestInt32     = FCString::Atoi(*TestString);
    float Testfloat     = FCString::Atof(*TestString);

    비교

    서로다른 FString을 비교할 수 있다.
    오버로딩된 == 연산자를 이용해서 비교하거나 Equals 함수를 통해 비교가 가능하며
    Equals 함수에는 대소문자를 무시할것인지에대한 이넘을 지정할 수 있다.
    ==연산자는 대소문자를 구분하지 않는 조건으로 비교한다.
    Compare 함수로도 대소문자 조건을 지정하며 비교할 수 있다.

    FString LTestStr = TEXT("test");
    FString UTestStr = TEXT("TEST");
    
    bool bOperator = LTestStr == UTestStr;  
    bool bEquals1 = LTestStr.Equals(UTestStr, ESearchCase::IgnoreCase);
    bool bEquals2 = LTestStr.Equals(UTestStr, ESearchCase::CaseSensitive);
    bool bCompare1 = LTestStr.Compare(UTestStr, ESearchCase::IgnoreCase);
    bool bCompare2 = LTestStr.Compare(UTestStr, ESearchCase::CaseSensitive);
    
    //bOperator = true
    //bEquals1 = true
    //bEquals2 = false
    //bCompare1 = true
    //bCompare2 = false

    검색

    검색에는 다음 두가지 유형이 있다.

    Contains

    • Contains 함수는 서브 스트링이 포함되어있는지 bool값을 반환하는 함수
    • 첫번째 인자로 검색할 서브스트링을 입력
    • 두번째 인자로 대소문자 무시여부를 이넘으로 지정
    • 세번째 인자로 앞에서 부터 탐색할지 뒤에서 부터 탐색할지 이넘으로 지정

    Find

    • Find 함수는 서브스트링의 인덱스 값을 반환하는 함수
    • 찾지 못할경우 -1 값을 반환
    • 첫번째 인자로 검색할 서브스트링을 입력받음
    • 두번째 인자로 대소문자 무시 여부를 이넘으로 지정
    • 세번째 인자로 앞에서 부터 탐색할지 뒤에서 부터 탐색할지 이넘으로 지정
    • 네번째 인자로 시작 인덱스 값을 지정할 수 있음
    FString TestString = TEXT("Test String");
    
    bool bContains = TestString.Contains(TEXT("Test"),  ESearchCase::CaseSensitive, ESearchDir::FromStart);
    int32 FindIdx1 = TestString.Find(TEXT("Str"), ESearchCase::CaseSensitive, ESearchDir::FromStart, INDEX_NONE);
    int32 FindIdx2 = TestString.Find(TEXT("Str"), ESearchCase::CaseSensitive, ESearchDir::FromStart, 6);
    
    //bContains = true
    //FindIdx1 = 5
    //FindIdx2 = -1

    조립

    스트링을 조립하는 함수는 다음 두가지가 있다.

    접합

    • 접합 연산자 += / + 를 사용하여 두개의 스트링을 덧붙일수 있다.
    FString TestString1 = TEXT("Test");
    TestString1 += TEXT(" String");
    
    //TestString1 = "Test String"
    
    FString TestString2 = TestString1 + TEXT(" Plus");
    
    //TestString2 = "Test String Plus"

    printf

    • FString::printf 함수는 C++ printf 와 동일한 형식으로 조립되어 FString을 반환 한다.
    FString TestString = FString::printf(TEXT("FString [%s], int [%d], float [%f]"), TEXT("TEST"), 1, 2.3f);
    
    //TestString = FString [TEST], int [1], float [2.3f]

    참고

    반응형

    댓글

    Designed by JB FACTORY