如何解析包含矩形数据序列的字符串?
问题描述:
我应该解析包含以下列格式的某些数据的字符串:如何解析包含矩形数据序列的字符串?
- 字符串中指定的图像与零个,一个或多个矩形相关联;
- 矩形的坐标用圆括号括起来,由四个用逗号隔开的整数形成;
- 每个矩形用逗号分隔;
- 该字符串以分号结尾。字符串的
实施例:
"image.png": (xmin, ymin, xmax, ymax), (xmin, ymin, xmax, ymax);
我想检索以下信息:
- 包含图像的文件名的
string
,例如image.png
; - a
vector<Rect>
包含矩形的序列。
矩形定义如下结构:
struct Rect
{
int xmin;
int ymin;
int xmax;
int ymax;
}
如何处理以简单的方式问题,而无需使用外部库?
答
要以简单的方式处理这个问题,您可以使用带有开关盒的自动化工具。您只需要10个状态。状态列表如下: INIT,FILENAME,COLON,PARENTHSIS,XMIN,YMIN ,XMAX,YMAX,逗号接受。 init state
是INIT
。 所以开关case语句是:
ch = getNextChar();
switch(state)
{
case INIT:
if(ch == '\"')
state = FILENAME;
break;
case FILENAME:
if(ch != '\"')
filename.append(ch);
else
state = COLON;
break;
case COLON:
// more cases;
// ...
default:
}
这样,你可以很容易地解析这个字符串。
+0
您忘记了WHITESPACE状态。 – 2013-05-01 16:27:31
答
尝试铛。 As:
clang++ -std=c++0x -stdlib=libc++ yourfile.cpp
Clang 3.3支持正则表达式。如果需要,在Linux上运行。
正则表达式是你的朋友。自己实施这个特殊案例非常麻烦,为什么?这是另一个家庭作业吗? – 2013-05-01 16:04:19
@Haroogan:如何使用正则表达式? – enzom83 2013-05-01 16:08:39
请参阅[本](http://en.cppreference.com/w/cpp/regex)。 **注意:**您的标准库必须符合C++ 11标准。 – 2013-05-01 16:11:16