2013-05-01 98 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上運行。

相關問題