Changeset 435


Ignore:
Timestamp:
Dec 15, 2005, 12:25:06 AM (17 years ago)
Author:
Markus Ringnér
Message:

Changed to using stringstreams when checking types for strings

Location:
trunk/lib/utility
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/utility/utility.cc

    r327 r435  
    33#include <c++_tools/utility/utility.h>
    44
    5 #include <iostream>
     5#include <c++_tools/utility/stl_utility.h>
     6
    67#include <sstream>
    78#include <string>
    8 #include <vector>
    99
    1010namespace theplu {
    1111namespace utility {
    1212
    13 
     13  bool is_double(const std::string& s)
     14  {
     15    std::stringstream ss(s);
     16    double a;
     17    if(ss>>a)
     18      return 1;
     19    else
     20      return 0;
     21  }
     22 
    1423  bool is_float(const std::string& s)
    1524  {
    16     // have decimal point
    17     bool dp = false;
    18     size_t i = 0;
    19     if ((s[i]=='-') || (s[i]=='+')) {
    20       i++;
    21       // empty after sign
    22       if (i >= s.size())
    23         return false;
    24     }
    25     bool isf = false;
    26     while (i<s.size()) {
    27       if ((s[i]<'0') || (s[i]>'9')) {
    28           if (s[i] == '.') {
    29             // two decimals
    30             if (dp)
    31               return false;
    32             else
    33               dp = true;
    34           }
    35           else if ((s[i]=='E') || (s[i]=='e')) {
    36             i++;
    37             // nothing following E
    38             if (i>=s.size())
    39               return false;
    40             std::string tmp_str(s,i);
    41             return is_int(tmp_str);
    42           }
    43       }
    44       else
    45         isf = true;
    46       i++;
    47     }
    48     return isf;
     25    std::stringstream ss(s);
     26    float a;
     27    if(ss>>a)
     28      return 1;
     29    else
     30      return 0;
    4931  }
    50 
    51 
    5232
    5333  bool is_int(const std::string& s)
    5434  {
    55     size_t i = 0;
    56     if ((s[i]=='-') || (s[i]=='+')) {
    57       i++;
    58       // nothing following sign
    59       if (i>=s.size())
    60         return false;
    61     }
    62     while (i<s.size()) {
    63       if ((s[i]<'0') || (s[i]>'9'))
    64         return false;
    65       i++;
    66     }
    67     return true;
     35    std::stringstream ss(s);
     36    int a;
     37    if(ss>>a)
     38      return 1;
     39    else
     40      return 0;
     41  }
     42
     43  bool is_nan(const std::string& s)
     44  {
     45    std::stringstream ss(s);
     46    std::string s2;
     47    ss >> s2; // to trim surrounding whitespaces
     48    to_lower(s2);
     49    std::string nan("nan");
     50    return (nan==s2);
    6851  }
    6952
  • trunk/lib/utility/utility.h

    r389 r435  
    1717
    1818  ///
    19   /// Function return true if string is a number. A number is defined
    20   /// to start with plus(+), minus(-), deimal point(.), or a
    21   /// digit(0-9). It must contain at most one decimal point(.). Also
    22   /// it may contain 'E' or 'e' followed by an integer (see is_int).
     19  /// @return true if string is a double
    2320  ///
    24   /// @return true if string is a number
     21  bool is_double(const std::string&);
     22
     23
     24  ///
     25  /// @return true if string is a float
    2526  ///
    2627  bool is_float(const std::string&);
    2728
    2829  ///
    29   /// @return true if every character in string is a digit except the
    30   /// first one that may be '+' or '-'
     30  /// @return true if string is an int
    3131  ///
    3232  bool is_int(const std::string&);
    3333
     34  ///
     35  /// @return true if string is "nan" (case-insensitive)
     36  ///
     37  bool is_nan(const std::string& s);
    3438
    3539}} // of namespace utility and namespace theplu
Note: See TracChangeset for help on using the changeset viewer.