【问题标题】:Number extraction from a string such as an integer or double从字符串中提取数字,例如整数或双精度
【发布时间】:2013-02-26 01:29:45
【问题描述】:

我很难想办法从 getline() 函数提取的字符串中提取整数,例如 int 或 double。

//示例:

string data = "";
fstream inFile;

//文件包含:

"Hello today is 83.3 degrees Fahrenheit."

//使用getline函数

getline(inFile, data);

//从字符串数据中提取数字

谢谢

【问题讨论】:

  • 我应该从哪里开始?我在哪里可以找到这方面的教程?
  • 你是否可以访问 C++11 或 boost(两者都包含正则表达式)?
  • 我不能使用那些类型的库。

标签: c++ string getline file-read data-manipulation


【解决方案1】:

如果你准备包含 cstdio,你可以使用 sscanf。

以下手册页链接将对您有所帮助:-

http://linux.die.net/man/3/sscanf

示例

char foo[] = "foo bar 12 baz";
int qux;
sscanf(foo, "foo bar %d baz", &qux); 
// qux will be assigned 12

char foo[] = "foo bar 12.5 baz";
double qux;
sscanf(foo, "foo bar %lf baz", &qux); 
// qux will be assigned 12.5 

您显然需要根据您的情况对其进行调整,并考虑各种安全问题。

【讨论】:

    【解决方案2】:

    你可以这样做

    getline(inFile, data);
    
    std::istringstream iss;
    iss.exceptions(std::istream::failbit | std::istream::badbit );
    
    iss.str(data);
    double dTemp = 0;
    
    while( iss.good() ){
    
      try{
       iss >> dTemp;
       }      
      catch(std::istream::failure &e ){
       /* Do your error check over here */
      }
    
    }
    

    您还想了解更多关于 C++ 的信息。检查这个link

    希望这会有所帮助。

    【讨论】:

    • 这将完全失败,因为 OP 字符串中的第一件事不是数字,而是一些随机单词。
    • 谢谢,我同意你的看法。我们还需要检查failbit和badbit。
    猜你喜欢
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 2013-05-18
    • 2022-11-21
    相关资源
    最近更新 更多