-

[C++] 공백 무시하고 문자열 뽑아내기 본문

7. 코딩 스킬

[C++] 공백 무시하고 문자열 뽑아내기

asdklfjlasdlfkj 2020. 2. 8. 22:04

C++로 코딩 테스트를 준비하다보면 문자열에 대한 공부를 하게 된다.

이전에 compare, substr, replace, swap, find 함수에 대해 다룬 글 (https://cpp-dev.tistory.com/56?category=852537) 이 있다면, 오늘은 공백을 포함한 문자열이 주어졌을 때, 공백을 제외한 문자열들을 추리는 코드를 살펴보고자 한다.

 

심심치않게 이런 기능이 코딩테스트에서 활용되므로 여기에 정리해둔다.

예시를 위해 C++ STL <set>을 활용해봤다.

 

먼저 <sstream>을 추가하고 stringstream에 분석하고자 하는 문자열을 22줄과 같이 넣는다.

그리고 문자열 변수에 while을 돌며 엔터를 만날때까지 공백을 제외한 문자열을 차례로 넣어주면 된다.

해당 부분은 22~28줄이다. 

 

29~35줄은 string을 저장하는 집합에 대해 요소 접근을 예시로 들기 위해 넣어뒀다. 요소 접근은 *iter로 할 수 있다. 만약 s1와 같이 pair형태로 존재한다면 iter->first나 iter->second로 접근할 수 있다. iterator가 포인터 형이라 '->'가 사용되는 것이고, 벡터나 큐와 같은 자료구조로는 '.'로 first나 second에 접근할 수 있다.

오늘 본 어느 기업의 코딩테스트에서 유용하게 사용되었다. 면접 가자아

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <set>
#include <sstream>
#include <string>
 
using namespace std;
 
int main(){
    set<pair<stringstring> > s1;
    set<string> s2;
 
    s1.insert(make_pair("Adam""Apple"));
    s1.insert(make_pair("Jack""Banana"));
    s1.insert(make_pair("James""Mango"));
    string allconcat;
    for (set<pair<stringstring> >::iterator iter = s1.begin(); iter != s1.end(); iter++){
        allconcat += iter->first;
        allconcat += " ";
        allconcat += iter->second;
        allconcat += " ";
    }
    stringstream ss(allconcat);
    string emp;
    cout << "1. 공백 무시하고 문자열 뽑아내기 (stringstream)\n";
    while (ss >> emp){
        cout << emp << '\n';
        s2.insert(emp);
    }
    cout << "2. 요소가 하나인 문자열 집합 출력하기 (*iter) \n";
    for (set<string>::iterator iter = s2.begin(); iter != s2.end(); iter++){
        emp = *iter;
        cout << emp << '\n'// 또는 cout << *iter << '\n';
    }
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

Comments