2017-10-25 8 views
-2

imは航空機に入力された見出しを確実にするために正規表現を使用しようとしていますが、私はそれを動作させることはできません。正規表現が動作しないC++

std::regex headingCheck{"^([0-9]|1[0-9]2[0])$"}; 
    bool match = false; 
    while (!match) 
    { 
     if (std::regex_match(heading, headingCheck)) 
     { 
      heading_ = heading; 
     } 
     else 
     { 
      std::cout << "Invalid heading, can only be between 0 and 360 degrees" << std::endl; 
     } 
    } 

//Heading can only be between 0-360? 
    if (heading >= 0 && heading <= 360) 
    { 
     heading_ = heading; 
    } 
    else 
    { 
     std::cout << "Incorrect heading, heading can only be between 0 and 360" << std::endl; 
    } 

私の代わりにこれを行うべきでしょうか?それは正確で信頼できるものですか?

+7

ケーシングをint型にしようとすると、範囲を調べますか? - これはREの仕事ではありません。 –

+1

正規表現で範囲を検証することは可能ですが、単純に 'int'に変換して範囲をチェックするより複雑です。その番号が提供されていることを確認するためにregexを使ってください。 – Slava

+0

void航空機:: SetHeading(int見出し) { \t //見出しは0〜360の間でなければなりませんか? \t //正規表現を設定して入力と比較します \t std :: regex headingCheck {"^([0-9] | 1 [0-9] 2 [0])$"}; \t bool match = false; \t一方(マッチ!) \t {\t \t場合(STD :: regex_match(見出し、headingCheck)) \t \t { \t \t \t heading_ =見出し。 \t \t} \t \t他 \t \t { \t \t \tのstd :: coutの<< <<はstd :: ENDL "無効な見出し、のみ0と360度の間とすることができます"。 \t \t \t }セッターメソッドの場合は、どういう意味のチェック範囲ですか? – MurrackCarn

答えて

1

(これは最適ではないですが)あなたはまだ正規表現をしたい場合は、次の式を使用することができます:最初の部分は0-9一致する

std::regex re{ "^[0-9]$|^[1-9][0-9]$|^[1-2][0-9][0-9]$|^3[0-5][0-9]$|^360$" }; 
std::string headings[5] = { "0","15","390","360","23883" }; 

for (int i = 0; i < 5; ++i) 
    std::cout << "Heading " << headings[i] << " is " << (std::regex_match(headings[i], re) ? "valid" : "invalid") << std::endl; 

は、第二部は10-99と一致するが、第三の部分は、100から299に一致します、4番目の部分は300-359、最後のマッチは360です。プリント:

Heading 0 is valid 
Heading 15 is valid 
Heading 390 is invalid 
Heading 360 is valid 
Heading 23883 is invalid 
+1

見出し275は無効ですか?うーん。まあまあ。 –

+0

良いキャッチ!編集済み –

関連する問題