如何解析包含矩形数据序列的字符串

How to parse a string containing a sequence of rectangles data?

本文关键字:字符串 数据 何解析 包含矩      更新时间:2023-10-16

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

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

字符串示例:

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

我想检索以下信息:

  • a包含图像文件名的string,例如image.png;
  • a包含矩形序列的vector<Rect>

Rect是下面定义的结构体:

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

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

为了以一种简单的方式处理这个问题,您可以使用带有开关情况的自动化实现。你只需要10个州。这些州的名单如下:INIT、文件名、结肠癌、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:
}

试试clang。:

clang++ -std=c++0x -stdlib=libc++ yourfile.cpp
Clang 3.3支持正则表达式。