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;
}
'🌍 C++ Study > C++ 기초' 카테고리의 다른 글
C++ map (0) | 2024.11.14 |
---|---|
C++ 수열의 누적 합, 수열의 누적 처리 accumulate, reduce (0) | 2024.11.13 |
C++ string 이어 붙이기 (0) | 2024.11.11 |
C++ string replace 문자열 바꾸기 (0) | 2024.11.10 |
C++ 의 스트링빌더 std::stringstream (0) | 2024.11.10 |