작성
·
221
·
수정됨
0
강의에서는 atoi(s.c_str()) 를 쓰는데
혹시 stoi 함수랑 개념이 같나요?
두 함수 모두 string 에서 int 형으로 변환하는데
어떤 차이가 있나요?
저는
for(int i=0;i<m;i++){
cin >> s;
if(atoi(s.c_str()) == 0) cout<<A[s] << "\n";
else cout << B[atoi(s.c_str())] << "\n";
}
이 부분을
for(int i=0;i<m;i++){
cin >> s;
if(isdigit(s[0])){
cout << B[stoi(s)] << "\n";
}
else{
cout << A[s] << "\n";
}
}
이렇게 해봤네요
답변 2
0
안녕하세요 은우님 ㅎㅎ
혹시 stoi 함수랑 개념이 같나요?
두 함수 모두 string 에서 int 형으로 변환하는데
>> 네 하는 역할은 비슷합니다. string 또는 char* -> int에 대한 역할을 수행합니다. 즉, 둘 다 정수형 변환에 대한 역할을 수행합니다.
stoi()에 대한 자세한 설명은 다음과 같습니다.
참고로 atoi()와 같은 기능을 하는 함수는 stoi()입니다. const char * 타입이 아닌 string 을 받아서 정수 int를 반환합니다.
#include <bits/stdc++.h>
using namespace std;
int main() {
string s = "1234";
int num = stoi(s);
cout << num; // 1234
return 0;
}
다만 문자열, string으로 입력을 받아 입력받은 글자가 문자열인지 숫자인지 확인해야 하는 로직이 필요할 때는 atoi()를 써야 합니다. stoi()를 하게 되었을 때 문자열이라면 다음과 같은 에러가 발생되게 됩니다. (에러 처리하는 로직을 넣는 것보다 0이 나와서 로직을 쓰는게 더 좋기 때문입니다.)
에러가 발생하는 코드
#include <bits/stdc++.h>
using namespace std;
int main() {
string s = "aavv";
int num = stoi(s);
cout << num; // 1234
return 0;
}
참고로 해당 stoi에 대한 설명은 교안에 설명되어있습니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요, 인프런 AI 인턴입니다.
Eunwoo님, atoi
와 stoi
함수 모두 문자열을 정수로 변환하는 기능을 하지만 몇 가지 차이가 있습니다.
atoi
(ASCII to integer) 함수는 stdlib.h
헤더 파일에 선언되어 있으며, 문자열을 int
로 변환합니다만, 예외 처리 기능이 없습니다. 즉, 변환 과정에서 문제가 생겨도 예외를 던지지 않고 오류를 알 수 없습니다.stoi
(string to integer) 함수는 C++11에 추가되었고 string
을 int
로 변환하며, std::invalid_argument
나 std::out_of_range
같은 예외를 처리할 수 있는 기능을 가지고 있습니다.atoi
함수는 const char*
타입의 인자를 받기 때문에 std::string
을 사용할 때는 c_str()
을 호출하여 const char*
타입으로 변환해주어야 합니다. stoi
함수는 std::string
객체를 직접 인자로 받을 수 있습니다.따라서, Eunwoo님께서 작성하신 코드에서 atoi(s.c_str())
대신 stoi(s)
를 사용하는 것이 더 현대적이고 예외 처리 면에서 안전한 방법입니다. isdigit(s[0])
를 사용하여 문자열의 첫 번째 문자가 숫자인지 판단하고 분기하는 부분도 좋은 접근 방식입니다.