0

我应该解析一个包含以下格式的一些数据的字符串:

  • 字符串中命名的图像与零个、一个或多个矩形相关联;
  • 矩形的坐标用括号括起来,由逗号分隔的四个整数组成;
  • 每个矩形与下一个矩形之间用逗号分隔;
  • 字符串以分号结尾。

字符串示例:

"image.png": (xmin, ymin, xmax, ymax), (xmin, ymin, xmax, ymax);

我想检索以下信息:

  • astring包含图像的文件名,例如image.png;
  • avector<Rect>包含矩形的序列。

Rect 是下面定义的结构:

struct Rect
{
    int xmin;
    int ymin;
    int xmax;
    int ymax;
}

如何在不使用外部库的情况下以简单的方式处理问题?

4

2 回答 2

1

为了简单地处理这个问题,你可以使用带有开关盒的自动化工具。你只需要10个状态。状态如下:INIT,FILENAME,COLON,PARENTHSIS,XMIN,YMIN,XMAX,YMAX,逗号,接受。初始化stateINIT. 所以switch 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:
}

像这样,你可以很容易地解析这个字符串。

于 2013-05-01T16:21:45.887 回答
0

试试铿锵。作为 :

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

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

于 2013-05-09T15:11:28.053 回答