2016-09-26 12 views
-2

正規表現を使用して指定された文字列パターンから数値を取得する簡単な方法は何ですか?cpp文字列から数値を取得する

文字列パターンが似ている、

${type:1234} ${type:2345} 

私はその場合、1234年には、数字をしたい、2345

文字列パッテンもスペースを含めることができ、

${(WS)*type(WS)*:(WS)*1234(WS)*} , ... (more like this) 

I文字列が有効なパターンであるかどうかチェックし、そうである場合は数字を抽出する必要もあります。

私はtokenizerを使って簡単に行うことができますが、正規表現を使う方が良いと思います。

あなたは、ループを使用して欲しいものを達成するためにいくつかの魔法を使用
+0

あなたはこのような何かを意味します: '(\ $ \ sの*の\ {\ sの*型\ S * \:\はS *を[0-9] + \ s * \} \ s *)* '? – Blobonat

+2

これはコード要求です。 OPは正規表現を必要とするだけでなく、彼が望むことをするために働くC/C++プログラムも必要とします。彼は彼がどんなラング、CまたはC++を望んでいるかを指定しなかった...! – Jahid

+0

@WiktorStribiżewしかし、OPはRegExを構築しようとしました。彼は正しい構文を知らない。 IMOは、この質問には良い答えを与えるのに十分な情報が含まれています。 (しかし、私はC/C++部分のコードリクエストが広すぎて答えられないことに同意します) – Blobonat

答えて

1

#include <iostream> 
#include <string> 

int main() 
{ 

    std::string str("${type:1234} ${type:2345}"); 

    int n = 0; 

    for(int i(0); i < str.length(); i++) 
    { 
     if(isdigit(str[i])) 
     { 
      n++; 
      while(isdigit(str[i])) 
       i++; 
     } 
    } 

    std::cout << "There are: " << n << std::endl; 

    std::string* strTmp = new std::string[n]; 
    int j = 0; 

    for(int i = 0; i < str.length(); i++) 
    { 
     if(isdigit(str[i])) 
     { 
      while(isdigit(str[i])) 
      { 
       strTmp[j] += str[i]; 
       i++; 
      } 
      j++; 
     } 
    } 

    for(int i = 0; i < n; i++) 
     std::cout << strTmp[i] << std::endl; 

    // now you have strTmo holding numbers as strings you can convert them to integer: 

    int *pInt = new int[n]; 

    for(int i = 0; i < n; i++) 
     pInt[i] = atoi(strTmp[i].c_str()); 

    for(int i = 0; i < n; i++) 
     std::cout << "value " << i+1 << ": " << pInt[i] << std::endl; 

    delete[] strTmp; 
    strTmp = NULL; 
    delete[] pInt; 
    pInt = NULL; 


    std::cout << std::endl; 
    return 0; 
} 
関連する問題