Make Unreal REAL.
article thumbnail

 

공백은 출력 시 잘 안 보이기 때문에 '_'로 대체했다.

 

처음으로 공백이 아닌 지점을 찾아 좌측 공백을 없앤다.

 

string ltrim(string s)
{
    string t = "";
    bool bFinished = false;

    for (char c : s)
    {
        if (c != '_')
            bFinished = true;

        if (bFinished)
            t += c;
    }

    return t;
}

 

마찬가지이지만 find_if_not() 함수를 이용할 수도 있다.

 

string ltrim(string s)
{
    auto it = find_if_not(s.begin(), s.end(), [](char c) { return c == '_'; });

    return (it == s.end()) ? "" : string(it, s.end());
}

 

처음으로 공백이 아닌 지점을 뒤에서부터 찾아 우측 공백을 없앤다.

 

string rtrim(string s)
{
    string t = "";
    bool bFinished = false;

    for (auto rit = s.rbegin(); rit != s.rend(); ++rit)
    {
        if (*rit != '_')
            bFinished = true;

        if (bFinished)
            t = *rit + t;
    }

    return t;
}

 

find_if_not() 함수를 뒤에서부터 수행하고 문자열을 뒤집어도 된다.

 

string rtrim(string s)
{
    auto rit = find_if_not(s.rbegin(), s.rend(), [](char c) { return c == '_'; });

    s = (rit == s.rend()) ? "" : string(rit, s.rend());
    reverse(s.begin(), s.end());

    return s;
}

 

좌우측 공백을 없앤다.

 

string trim(string s)
{
    return ltrim(rtrim(s));
}

 

istream은 공백을 자동으로 무시한다.

 

string remove_blank(string s)
{
    string t;
    istringstream iss(s);
    ostringstream oss;

    while (iss >> t)
        oss << t;

    return oss.str();
}

 

ostringstream을 활용해 좌측을 특정 문자만큼 채울 수 있다.

 

string fill(int num, int width, char ch)
{
    ostringstream oss;

    oss << setw(width) << setfill(ch) << num;

    return oss.str();
}

 

예시

 

void main()
{
    string s = "___H_E_L_L_O___";
    cout << ltrim(s) << endl;
    cout << rtrim(s) << endl;
    cout << trim(s) << endl;

    s = "      H E LL O  W OR L   D   ";
    cout << remove_blank(s) << endl;

    cout << fill(603, 6, '0') << endl;
    cout << fill(111, 7, '#') << endl;
}

 

출력

H_E_L_L_O___
H_E_L_L_O___
___H_E_L_L_O
___H_E_L_L_O
H_E_L_L_O
HELLOWORLD
000603
####111
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그