AI Researcher @NCSOFT
TODAY TOTAL
c++ std 이용하여 string 분할하기


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;

}



  Comments,     Trackbacks