전체 글 (630)

2024
11.11

1. string > int 로 변환하기

C++ 에는 C#의 int.parse같은 직접적인 기능은 없다.

 

1-1 std::stoi, std::stol, std::stoll, std::stof, std::stod 함수

std::stoi 는 string to int의 약어이다.

<string> 헤더에 포함된 함수들이며, int / long / long long / float / double 에 대응된다.

int intValue = std::stoi(strInt);
float floatValue = std::stof(strFloat);

 

1-2 std::from_chars 함수 (C++17 이상)

stoi 함수는 변환 불가능한 문자열이 들어왔을 때 오류가 발생해버린다.

예외보다는 오류코드를 처리하는 편이 더 유연하기 때문에 C++17에서는 새로운 함수가 생겼다.

<charconv> 헤더에 있는 std::from_chars 를 사용하자.

#include <iostream>
#include <charconv>
#include <string>

int main() {
    std::string str = "12345";
    int value;

    auto result = std::from_chars(str.data(), str.data() + str.size(), value);

    if (result.ec == std::errc()) {  // 변환 성공 여부 확인
        std::cout << "Converted value: " << value << std::endl;  // 출력: Converted value: 12345
    } else {
        std::cerr << "Conversion failed" << std::endl;
    }

    return 0;
}

 

std::from_chars는 오류가 발생하면

 std::errc::invalid_argument 또는 std::errc::result_out_of_range를 반환한다.

 

1-3 char 형에서 int로 변환하기

char형은 아스키코드인덱스인 int로 변환되기 때문에 '0' 의 아스키 코드 인덱스를 빼주면 된다.

char c = '5'
int charZeroIndex = '0';
int num = c - charZeroIndex;

 

2. int > string으로 변환하기

2-1. std::to_string 함수 사용하기 (C++11 이상)

std::string str = std::to_string(number);

 

2-2. std::ostringstream 사용하기

std::ostringstream 은 <sstream> 에 포함되어있으며

std::stringstream 의 읽기전용버전이다.

#include <iostream>
#include <sstream>
#include <string>

int main() {
    int number = 123;
    std::ostringstream oss;
    oss << number;
    std::string str = oss.str();
    std::cout << "String: " << str << std::endl;  // 출력: String: 123
    return 0;
}

 

2-3. std::format 사용하기 (C++20 이상)

<format> 헤더에 포함되어있다.

반복문보다는 정해진 규격에 따라 변환해야되는 경우에 유용하다.

#include <iostream>
#include <format>
#include <string>

int main() {
    int number = 123;
    std::string str = std::format("{}", number);
    std::cout << "String: " << str << std::endl;  // 출력: String: 123
    return 0;
}