2016-04-23 8 views
0

したがって、行の種類を特定してどのような種類のデータを出力するかを知る必要があります。たとえば、行に123と表示されている場合は、123 intと出力する必要があります。ファイルからデータ型を特定する方法

私のプログラムでは、booleanstring、およびcharと表示されています。 intまたはdoubleの場合はどうすれば教えてください。

int main() { 
    string line; 
    string arr[30]; 
    ifstream file("pp.txt"); 
    if (file.is_open()){ 
     for (int i = 0; i <= 4; i++) { 
      file >> arr[i]; 
      cout << arr[i]; 
      if (arr[i] == "true" || arr[i] == "false") { 
       cout << " boolean" << endl; 

      } 
      if (arr[i].length() == 1) { 
       cout << " character" << endl; 

      } 
      if (arr[i].length() > 1 && arr[i] != "true" && arr[i] != "false") { 
       cout << " string" << endl; 
      } 
     } 
     file.close(); 
    } 
    else 
     cout << "Unable to open file"; 
    system("pause"); 
} 

おかげ

+0

あなたは正規表現を使用することができますか? \ d + \。\ d +と一致する場合はdoubleを持ち、\ d + $と一致する場合は、 – saml

+0

整数または浮動小数点数の無限集合があります。値123は浮動小数点値または整数です。一部のアルゴリズムでは小数点が使用されるため、123は整数、123は浮動小数点です。いくつかの実装では、1.23E + 2の科学記法が必要です。 –

答えて

1

使用正規表現:http://www.cplusplus.com/reference/regex/

#include <regex> 
std::string token = "true"; 
std::regex boolean_expr = std::regex("^false|true$"); 
std::regex float_expr = std::regex("^\d+\.\d+$"); 
std::regex integer_expr = std::regex("^\d+$"); 
... 
if (std::regex_match(token, boolean_expr)) { 
    // matched a boolean, do something 
} 
else if (std::regex_match(token, float_expr)) { 
    // matched a float 
} 
else if (std::regex_match(token, integer_expr)) { 
    // matched an integer 
} 
... 
+1

注意:C++のすべてのバージョンに正規表現機能があるわけではありません。 StackOverflowに投稿している多くの人はTurboC++をまだ使用していますが、これは間違いなくC++正規表現をサポートしていません。 –

+0

正規表現は、整数値と浮動小数点値をどのように区別しますか?これはOPが望むものです。値456は整数または浮動小数点のいずれかになりうるため、正規表現は少し複雑かもしれないので私は尋ねています。 –

+0

標準的な方法が望ましいはずです。コンパイラが標準機能をサポートしていない場合は、それらを提供するライブラリがあります。 正規表現を使わないで解析するのは苦痛なので、存在することを知り、それを学ぶ方がよいでしょう。 – Rei