2013-05-01 45 views
0

我应该解析包含以下列格式的某些数据的字符串:如何解析包含矩形数据序列的字符串?

  • 字符串中指定的图像与零个,一个或多个矩形相关联;
  • 矩形的坐标用圆括号括起来,由四个用逗号隔开的整数形成;
  • 每个矩形用逗号分隔;
  • 该字符串以分号结尾。字符串的

实施例:

"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; 
} 

如何处理以简单的方式问题,而无需使用外部库?

+0

正则表达式是你的朋友。自己实施这个特殊案例非常麻烦,为什么?这是另一个家庭作业吗? – 2013-05-01 16:04:19

+0

@Haroogan:如何使用正则表达式? – enzom83 2013-05-01 16:08:39

+1

请参阅[本](http://en.cppreference.com/w/cpp/regex)。 **注意:**您的标准库必须符合C++ 11标准。 – 2013-05-01 16:11:16

回答

1

要以简单的方式处理这个问题,您可以使用带有开关盒的自动化工具。您只需要10个状态。状态列表如下: INIT,FILENAME,COLON,PARENTHSIS,XMIN,YMIN ,XMAX,YMAX,逗号接受。 init stateINIT。 所以开关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

0

尝试铛。 As:

clang++ -std=c++0x -stdlib=libc++ yourfile.cpp 

Clang 3.3支持正则表达式。如果需要,在Linux上运行。

相关问题