Computer/Algorithm
c++ std 이용하여 string 분할하기
Minwook Chang
2016. 10. 3. 11:35
C++에서 std 라이브러리만을 사용해 string을 나누어보자.
string을 인자로 주면 list<string>을 출력한다.
아래 코드는 '-'과 '_'를 기점으로 분리해준다.
#include <list>
#include <string>
#include <distance>
using namespace std;
list<string> str_split2(string str) {
list<string> strlist;
string::iterator tempit = str.begin();
int hd, tl;
bool goodword = true;
for (string::iterator it = str.begin(); it != str.end(); it++) {
//맨 처음 -나 _가 나오는 경우
if (it == str.begin() && (*it == '-' || *it == '_' || *it == '/' || *it == '.')) {
tempit++;
goodword = false;
}
// 중간에 -나 _가 나오는 경우
else if (*it == '-' || *it == '_' || *it == '/' || *it == '.') {
if (it != str.end() - 1) {
hd = distance(str.begin(), tempit);
tl = distance(tempit, it);
if (str.substr(hd, tl).length() > 0) {
strlist.push_back(str.substr(hd, tl));
}
tempit = it + 1;
goodword = false;
}
//마지막에 나옴
else {
hd = distance(str.begin(), tempit);
tl = distance(tempit, it);
strlist.push_back(str.substr(hd, tl));
goodword = false;
}
}
//마지막에 특수문자가 안나오는 경우에는 for문을 끝내기 전에 남은 단어를 넣어준다.
else if (it == str.end() - 1 && !goodword) {
hd = distance(str.begin(), tempit);
tl = distance(tempit, it+1);
strlist.push_back(str.substr(hd, tl));
}
}
if (goodword == true && str.length()>0) {
strlist.push_back(str);
}
return strlist;
}