2017-05-25 3 views
-1

で使用すると、文字列(または私が提供できるソリューションに応じてchar *)を反復処理する必要があります。その後、イテレータのregex_match()をC++プロジェクトの文字列であるC++

(私はif文の上coutの< < *それ< <」ENDLを置くことができますし、私は正しい出力を得る)イテレータがうまく機能

void Pile::evalExpress(char* expchar){ 
    string express = expchar 
    regex number {"[+-*/]"}; 

    for(string::iterator it = express.begin(); it!=express.end(); ++it){ 
     if(regex_match(*it,number)){ 
      cout<<*it<<endl; 
     } 
    } 
} 

char expchar[]="234*+"; 
Pile calcTest; 
calcTest.evalExpress(expchar); 

と:だから基本的に私はこれをやっています私がコンパイルしようとすると:

error: no matching function for call to 'regex_match(char&, std::__cxx11::regex&)' 
    if(regex_match(*it,number)){ 
          ^

を私はなぜこれが起こっている見当がつかない、)I [i]は、イテレータを使用してexpcharに直接反復していないことを試みたが、私はregex_match(と同じエラーを持っています。 ..

よろしく

ヴィンセント

答えて

2

エラーメッセージを読んで! charregex_matchに渡そうとしていることがわかります。文字列(またはその他の文字列)が1文字ではないため、不可能です。

代わりにif (std::regex_match(it, it+1, number))とすることができます。それは、文字のシーケンスをitからit+1(すなわち、長さ1のシーケンス)から検索すると言います。

またstringを作成しないようにしてこんにちは、おかげであなたの答えのためのchar*直接

void Pile::evalExpress(const char* expchar) { 
    std::regex number {"[+-*/]"}; 

    for (const char* p = expchar; *p != '\0'; ++p) { 
     if (regex_match(p, p+1, number)) { 
      cout<<*p<<endl; 
     } 
    } 
} 
+0

を反復処理することができます。私はちょっと混乱していましたが、「文字」の中では...私は、文字が1つでもあっても、まだchar *ですが、実用的ではありません。 – Gozu09

+0

これは、それが 'char'への参照であることを意味します。 [C++の良い本](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)を入手してください。 –