250x250
Notice
Recent Posts
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
관리 메뉴

일상 코딩

[C++/CPP] 17.02 std::String 여러 생성자들과 형변환, various constructor and typecasting 본문

C++/따배C++ 17강 String

[C++/CPP] 17.02 std::String 여러 생성자들과 형변환, various constructor and typecasting

polarcompass 2021. 12. 15. 01:33
728x90
#include<string>
#include<iostream>
#include<vector>
#include<sstream>

template <typename T>
std::string ToString( T x)
{
    std::ostringstream osstream;
    osstream << x;
    return osstream.str();
}

template <typename T>
bool FromString(const std::string &str, T &x)
{
    std::istringstream isstream(str);
    return (isstream >> x) ? true : false;
}

int main(void)
{
    std::string my_string("my string");

    // 0부터 2번 인덱스 글자는 건너뛰고 3번째 인덱스 글자부터 5개 글자 슬라이싱
    std::string second_string(my_string,3, 2);
    std::cout << second_string << std::endl;

    std::vector<char> vec;
    for(auto &e: "Today is a good day.")
        vec.push_back(e);

    std::string third_string(vec.begin(), vec.end());
    std::cout << third_string << std::endl;

    std::string fourth_string(vec.begin(), std::find(vec.begin(), vec.end(), 'y'));
    std::cout << fourth_string << std::endl;

    // 유용한것.
    // 정수를 문자열로 변환
    std::string my_str(std::to_string(1004));

    // 파이썬처럼 문자열합 사용 가능
    my_str += std::to_string(128);
    std::cout << my_str << std::endl;

    // string -> int로 변환
    int i = std::stoi(my_str);
    std::cout << i << std::endl;

    // string -> float로 변환
    float f = std::stof(my_str);
    std::cout << f << std::endl;

    // template <typename T>
    // std::string ToString( T x)
    // {
    //     std::ostringstream osstream;
    //     osstream << x;
    //     return osstream.str();
    // }
    std::string my_str2(ToString(3.141592));
    double d;

    if (FromString(my_str2, d))
        std::cout << "d : " << d << std::endl;
    else
        std::cout << "Cannot convert string to double" << std::endl;

    std::cout << "my_str2 : " << my_str2 << std::endl;

    return 0;
}
728x90