c에서는 char 자료형을 사용하여 배열에 이를 저장하는 방식으로 문자열을 처리하였는데, c++에서는 그럴 필요 없이 바로 string 자료형을 이용하면 된다.
String을 int형으로 전환하기 위해서는 stoi (String to int로 외우면 쉽다.)를 이용해야하는데 이를 위해서는
헤더파일에서 #include <string>을 해주어야 한다. (string.h가 아님에 매우 주의해야 한다.)
기본적인 위 함수의 parameter는 다음과 같다.
intstoi (const string& str, size_t* idx = 0, int base = 10)
이 함수의 전체적인 사용방법은 다음과 같다.
예를 들어
string example = "3314hello"라고 했을 경우, 위의 함수는 string을 앞에서부터 읽으면서 숫자가 나오지 않는 곳이 발견되면 멈추고 그곳까지를 int로 변환시킨다.
2번째 parameter는 포인터 변수인데 parameter의 의미는 어느곳에서 변환이 멈추었는지를 반환해 준다. (만약 필요없으면 nullprt를 넣으면 된다.)
3번째 parameter는 읽어들이는 내용이 몇진법으로 나타낸 정보인지를 표시한 것이다. 예를 들어 8을 집어넣게 되면 주어진 string이 8진법으로 인식하고 이를 10인수로 변환해준다.
#include <iostream>
using namespace std;
int main(void){
string hello = "3123hello";
size_t test_value;
int result = stoi(hello, &test_value);
cout << test_value << "\n";
cout << result << "\n";
return 0;
}
예를 들어 이 코드를 실행시키게 되면
test_value = 4 (h부터 숫자가 아니므로 index번호인 4가 들어가게 된다 즉 0~3까지가 숫자라는 것이다.)
result = 3123 (h부터 숫자가 아니므로 그 전까지만 int형으로 변환되게 된다.)
(이때, size_t 는 unsigned int라고 생각하면 된다.)
이러한 결론이 나온다.
비슷한 원리로 String을 정수(long형)과 실수형으로 변형시킬 수 있다.
1. 정수형
int stoi(const string& str, size_t* idx = 0, int base = 10)
long stoi(const string& str, size_t* idx = 0, int base = 10)
2. 실수형
float stof(const string& str, size_t* idx = 0)
double stof(const string& str, size_t* idx = 0)
반대로 숫자를 문자열로 전환하기 위한 방법은 to_string 함수를 사용하는 것이다.
(다만, 위의 내용과 마찬가지로 반드시 헤더에 #include <string>을 입력해야 한다.)
사용 방법은 다음과 같다.
to_string(숫자)
위의 내용을 이용한 문제풀이는 다음과 같다.
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(void){
int a, b ,c, result;
string result_string;
// Store num
int num_store[10];
fill_n(num_store, 10, 0);
// Input data
cin >> a;
cin >> b;
cin >> c;
result = a * b * c;
result_string = to_string(result);
int len_of_result = result_string.length();
for(int i = 0; i < len_of_result; i++){
int value = result_string[i] - '0';
num_store[value] += 1;
}
for(int i = 0; i < 10; i++){
cout << num_store[i] <<"\n";
}
}
물론 이 문제를 10으로 나눈 나머지를 이용하여 계속적으로 반복문을 돌려서 구하는 방법도 있지만, 연산결과 자체를 string으로 변환시켜서 구하는 방법도 있다는 것을 기억해두면 좋다.
string으로 연산결과를 바꾸기 위해서 중간에 to_string function을 이용하였다.