ababup1192
1/2/2017 - 9:37 AM

Split1.scala

#include <string>

template <typename List>
void split(const std::string& s, const std::string& delim, List& result) {
    result.clear();

    using string = std::string;
    string::size_type pos = 0;

    while(pos != string::npos ) {
        string::size_type p = s.find(delim, pos);

        if(p == string::npos) {
            result.push_back(s.substr(pos));
            break;
        }
        else {
            result.push_back(s.substr(pos, p - pos));
        }

        pos = p + delim.size();
    }
}

// ====== SAMPLE ======
#include <vector>
#include <iostream>
using namespace std;

int main(void) {
    std::vector<string> result;
    split("私の@@名前は@@太郎@@です@@", "@@", result);

    for(auto s : result) {
        cout << s << " / ";
    }
}
object Main{
 def split(str: String, delimiter: String): List[String] = {
    val escPattern = """([*+.?{}()^$-|\[\]])""".r
    val escDel = escPattern.replaceAllIn(delimiter, m => s"""\\\\${m.group(0)}""" )
    val pattern = s"""(.*?)${escDel}(.*)""".r
    str match {
      case "" => List()
      case pattern(w, res) => w :: split(res, delimiter)
      case w => List(w)
    }
  }

  def main(args: Array[String]): Unit = {
    println(split("私の**名前は**太郎**です**", "**"))
  }
}
object Main{
  def split(str: String, delimiter: String): List[String] = {
    val index = str indexOf delimiter
    val dellen = delimiter.length

    if(index == 0){
      List()
    } else if(index == -1){
      List("")
    } else {
      str.take(index) :: split(str.drop(index + dellen), delimiter)
    }
  }

  def main(args: Array[String]): Unit = {
    println(split("私の@@名前は@@太郎@@です@@", "@@"))
  }
}