C++의 문자열에서 Int 구문 분석
이 기사에서는 C++의 문자열에서int
를 구문 분석하는 방법에 대한 몇 가지 방법을 설명합니다.
std::stoi
함수를 사용하여 문자열에서 Int 구문 분석
stoi
함수는 string
헤더에 정의 된 문자열 라이브러리의 일부이며 문자열 값을 다른 숫자 유형으로 변환하는 데 사용할 수 있습니다. std::stoi
,std::stol
및std::stoll
은 부호있는 정수 변환에 사용됩니다. stoi
함수는 단일 ‘문자열’객체를 필수 인수로 사용하지만 프로그래머는 입력 문자열을 처리해야하는 정수와 숫자 기반을 저장할 주소를 지정할 수도 있습니다.
다음 예는stoi
함수의 여러 사용 사례를 보여줍니다. stoi
는 문자열의 선행 공백을 처리할 수 있지만 다른 문자는std::invalid_argument
예외를 발생시킵니다.
#include <charconv>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::stoi;
using std::string;
int main() {
string s1 = "333";
string s2 = "-333";
string s3 = "333xio";
string s4 = "01011101";
string s5 = " 333";
string s6 = "0x33";
int num1, num2, num3, num4, num5, num6;
num1 = stoi(s1);
num2 = stoi(s2);
num3 = stoi(s3);
num4 = stoi(s4, nullptr, 2);
num5 = stoi(s5);
num6 = stoi(s6, nullptr, 16);
cout << "num1: " << num1 << " | num2: " << num2 << endl;
cout << "num3: " << num3 << " | num4: " << num4 << endl;
cout << "num5: " << num5 << " | num6: " << num6 << endl;
return EXIT_SUCCESS;
}
출력:
num1: 333 | num2: -333
num3: 333 | num4: 93
num5: 333 | num6: 51
std::from_chars
함수를 사용하여 문자열에서 Int 구문 분석
대안으로 유틸리티 라이브러리의 from_chars
함수는 int
값을 구문 분석 할 수 있습니다. C++ 17 버전부터 표준 라이브러리의 일부였으며<charconv>
헤더 파일에 정의되어 있습니다.
stoi
와는 많이 다른 from_chars
는 개체 길이와 테두리를 인식하지 않고 문자 범위에서 작동합니다. 따라서 프로그래머는 처음 두 인수로 범위의 시작과 끝을 지정해야합니다. 세 번째 인수는 변환 된 값이 할당 될int
변수입니다.
하지만from_chars
는 입력 문자열에서 선행-
기호 만 처리할 수 있습니다. 따라서 다음 예제에서num5
및num6
의 가비지 값을 인쇄합니다.
#include <charconv>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::from_chars;
using std::stoi;
using std::string;
int main() {
string s1 = "333";
string s2 = "-333";
string s3 = "333xio";
string s4 = "01011101";
string s5 = " 333";
string s6 = "0x33";
int num1, num2, num3, num4, num5, num6;
from_chars(s1.c_str(), s1.c_str() + s1.length(), num1);
from_chars(s2.c_str(), s2.c_str() + s2.length(), num2);
from_chars(s3.c_str(), s3.c_str() + s3.length(), num3);
from_chars(s4.c_str(), s4.c_str() + s4.length(), num4, 2);
from_chars(s5.c_str(), s5.c_str() + s5.length(), num5);
from_chars(s6.c_str(), s6.c_str() + s6.length(), num6);
cout << "num1: " << num1 << " | num2: " << num2 << endl;
cout << "num3: " << num3 << " | num4: " << num4 << endl;
cout << "num5: " << num5 << " | num6: " << num6 << endl;
return EXIT_SUCCESS;
}
출력:
num1: 333 | num2: -333
num3: 333 | num4: 93
num5: -1858679306 | num6: 0
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook