我有点惊讶,因为网上没有关于此的任何信息, 而且我一直发现问题比我想象的要棘手。
规则如下:
编辑:空元素(包括前导或结尾定界符)可以忽略 代码签名(在C#中基本上是)
public static string[] smartSplit( string delimitedData, char delimiter, char escape) {}
当然,问题的最棘手的部分是转义的连续转义字符大小写,因为(调用/转义字符和,分隔符): ///////,= ////,
我是否想在网上或其他SO问题中解决此问题? 如果没有,那就动脑筋了……我认为这个问题 对于公共利益来说是很好的。我自己在做,但是 还没有一个好的解决方案。
void smartSplit(string const& text, char delim, char esc, vector& tokens) { enum State { NORMAL, IN_ESC }; State state = NORMAL; string frag;
for (size_t i = 0; i<text.length(); ++i) { char c = text[i]; switch (state) { case NORMAL: if (c == delim) { if (!frag.empty()) tokens.push_back(frag); frag.clear(); } else if (c == esc) state = IN_ESC; else frag.append(1, c); break; case IN_ESC: frag.append(1, c); state = NORMAL; break; } } if (!frag.empty()) tokens.push_back(frag); }