728x90
C++에서 특정 문자열을 숫자인지 확인하고 싶은 경우나 숫자로 변환하고 싶은 경우가 있습니다.
isdigit()
문자가 숫자인지 판별하는 함수로 매개 변수로 들어온 char 타입이 10진수 숫자로 변경이 가능하면
0 아닌 숫자(true), 아니면 0(false)를 반환합니다.
string 타입의 question 첫번째 char 값이 숫자인지 아닌지 판별합니다.
string question;
..
cin >> question;
if(isdigit(question[0])) { ... }
stoi()
c++11 이상일 때 string 형식의 변수를 정수형으로 변환합니다.
atoi() 함수가 C 라이브러리 내장 함수라 string 변수를 인자로 인식하지 못하는 문제를 해결한 함수입니다.
question 첫번째 char 값이 숫자라면 stoi함수를 통해 정수로 변환하여 index 에 저장합니다.
stoi() 함수는 값이 숫자와 문자가 혼재되어 있어도 숫자만 출력해줍니다.
string question;
..
cin >> question;
if(isdigit(question[0])) {
int index = stoi(question[0]);
...
}
atoi()
c++11 아래일 때, char 형식의 변수를 정수형으로 변환합니다.
atoi() 함수는 문자열에서 숫자가 아닌 문자를 만나기 전까지 숫자로 변환해주는 함수입니다.
다만, c_str() 함수를 통해 string -> char* 로 바꾼 후 char* -> int 로 바꾸어야 합니다.
stoi() 함수와 동일한 결과가 나오지만 c_str()을 부르고 또 atoi()를 불러 그리 효율적이지 못합니다.
atoi() 함수는 값이 문자일 경우 0을 출력합니다.
string question;
..
cin >> question;
if(isdigit(question[0])) {
// isdigit() 함수가 true 이면 문제 없이 해당 숫자가 저장됨
int index = atoi(question.c_str());
...
} else {
// isdigit() 함수가 false 이면 문자가 저장되어 있으므로 atoi() 함수 결과 값은 모두 0
int index = atoi(question.c_str()); // 0
}
따라서 atoi() 함수를 사용할 경우 자체적으로 문자와 숫자를 구별해주므로
isdigit() 함수를 사용할 필요가 없습니다.
to_string()
정수를 인자로 받아 문자열로 변환하여 반환하는 함수 입니다.
to_string 함수로 int 값을 string 형태의 숫자로 변환합니다.
string print(int ret){
string h = "00" + to_string(ret / 60);
string m = "00" + to_string(ret % 60);
return h.substr(h.size() - 2, 2) + ":" + m.substr(m.size() - 2, 2);
}
stringstream
정수 값을 스트림에 쓰고, 이 스트림에서 문자열로 변환하는 함수입니다.
12345 라는 정수를 stringstream에 저장한 후 stringstream에서 문자열로 값을 읽어와 출력합니다.
#include <bits/stdc++.h>
using namespace std;
int main(){
int num = 12345;
stringstream ss;
ss << num;
string str = ss.str();
cout << str << '\n';
return 0;
}