inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

1-I

1-I 문제 , 함수 질문

307

Eunwoo

작성한 질문수 19

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";
        }
    }

이렇게 해봤네요

c++ 코딩-테스트

답변 2

0

큰돌

안녕하세요 은우님 ㅎㅎ

혹시 stoi 함수랑 개념이 같나요?

두 함수 모두 string 에서 int 형으로 변환하는데

>> 네 하는 역할은 비슷합니다. string 또는 char* -> int에 대한 역할을 수행합니다. 즉, 둘 다 정수형 변환에 대한 역할을 수행합니다.

stoi()에 대한 자세한 설명은 다음과 같습니다.

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 인턴

안녕하세요, 인프런 AI 인턴입니다.
Eunwoo님, atoistoi 함수 모두 문자열을 정수로 변환하는 기능을 하지만 몇 가지 차이가 있습니다.

  • atoi (ASCII to integer) 함수는 stdlib.h 헤더 파일에 선언되어 있으며, 문자열을 int로 변환합니다만, 예외 처리 기능이 없습니다. 즉, 변환 과정에서 문제가 생겨도 예외를 던지지 않고 오류를 알 수 없습니다.
  • stoi (string to integer) 함수는 C++11에 추가되었고 stringint로 변환하며, std::invalid_argumentstd::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])를 사용하여 문자열의 첫 번째 문자가 숫자인지 판단하고 분기하는 부분도 좋은 접근 방식입니다.

코살구 1주차 1940번 문제 조건과 프라이빗 테스트 불일치 문의

0

9

2

문제를 고민하는 시간 관련

0

17

2

코딩살구클럽

0

30

2

코딩살구클럽 문의

0

32

2

코딩살구클럽 승인

0

33

2

DP 경우의 수 설명이 이해가 되지 않습니다.

0

33

2

3-F 채점 관련 질문

0

30

1

BFS, DFS 활용이 되는 상황에서의 방향성

0

32

2

코딩살구클럽 승인

0

44

2

코딩살구클럽승인

0

39

3

코딩살구클럽 승인

0

51

2

3-D 관련 질문

0

35

2

코살구 회원가입 문의

0

45

2

코살구 로그인 문제

0

65

2

3-A 문제 풀이 관련 질문

0

56

3

2-O 질문 있습니다

0

38

2

2-T 문제에 관한 질문

0

40

2

코딩 살구 클럽 접속 및 사용방법 문의

0

63

2

안녕하세요~. 현재 코살코딩클럽 사이트가 접속이 안됩니다~

0

65

2

코딩살구클럽 로그인문제

0

83

3

코딩 살구 클럽 로그인 문제

0

85

2

2-J 채점관련 질문

0

67

3

코딩 살구 클럽 Python 지원 가능 여부

0

77

1

살구클럽 아이디 없음 문제

0

76

1