c++의 경우는 문자열을 저장하는 방식이 여러가지가 존재한다.
(아래에 설명하는 내용을 쓰기 위해서 #include <string>을 헤더쪽에 적고 시작하도록 하자.)
1. String 자료형으로 처리
이 방법은 Python에서 사용한 여러가지 방법들을 활용하여 계산할 수 있는 장점이 있다.
append, pop등등을 활용할 수 있고 concat도 가능하다.
2. 배열로 처리
이 방법또한 매우 좋은 방법충에 하나이다.
#include <iostream>
using namespace std;
int main(void){
char test[100];
cin >> test;
cout << test;
return 0;
}
위처럼 그냥 input값을 받을 때, test로 집어넣는 식으로 하면 연산하기 쉽다.
다만, 이미 존재하는 문자열이나 숫자등을 배열로 넣는 것은 힘들다.
추가적으로 cout을 하는 와중에 null 문자를 기준으로 자르므로 배열의 크기와 관계 없이 출력된다.
(또한, 배열을 초기화할때 null문자가 들어갈 것까지 고려해야 한다.)
각각의 경우에서 매우 중요하게 작용하는 것은 문자열의 길이를 구하는 방법이다.
1.String 자료형
이 경우에는 string_type.size()를 사용하면 된다.
즉 String type인 test의 길이를 구하고 싶으면
test.size()를 사용하면 된다.
2.배열
이 경우에는 strlen(array_type)를 사용하면 된다.
즉, 예를 들어
#include <iostream>
using namespace std;
int main(void){
char test[100];
cin >> test;
cout << strlen(test);
return 0;
}
이런 코드에서 input값을 hi라고 입력하면 output값으로 2가 나오게 된다.(문자열의 길이가 2이므로)
각각의 경우에서 장단점이 존재하므로 두 경우 모두 알아두는 것이 좋다.
추가적으로 문자열을 비교하는 방법에도 차이가 존재한다.
1. String 자료형으로 처리
이 경우에는 string_type.compare(string_type)을 사용하면 된다.
즉, 예를 들어 String type로 저장된 문자열 example1과 example2를 비교한다고 하자
그러면, example1.compare(example2)를 사용하면 된다.
만약 두개의 문자열이 같으면 0을 반환한다.
만약 0보다 크면 사전상 example1이 뒤에 있다는 의미이고, 0보다 작으면 사전상 example2가 뒤에 있다는 의미이다.
2. 배열
이 경우에는 strcmp(array_type, array_type)를 사용하면 된다. (string compare로 기억하자.)
즉 예를 들어 배열로 저장된 문자열 example1과 example2를 비교한다고 하자.
그러면 strcmp(example1, example2)를 사용하면 된다.
반환값은 string에서와 동일하다.
위의 내용을 이용하여 간단히 풀 수 있는 문제이다.
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(void){
// How many repetition
int N;
cin >> N;
int result[N];
for(int i = 0; i < N; i++){
string test_case;
cin >> test_case;
int check = 0;
int sum = 0;
for(int i = 0; i < test_case.size(); i++){
if (test_case[i] == 'O'){
check += 1;
}
else{
sum += (check * (check + 1)) / 2;
check = 0;
}
}
sum += (check * (check + 1)) / 2;
result[i] = sum;
}
for(int i = 0; i < N; i++){
cout << result[i] << "\n";
}
return 0;
}