在c ++中将字符串的某些部分转换为int / double

时间:2014-10-28 15:34:22

标签: c

我正在尝试将字符串的某些数字转换为int / double。但是我收到了错误。我必须从字符串中找到数字并且必须将它们相加。

输入示例

92dt6s2zer8t5f6b5ds1

预期结果

125 (=92+6+2+8+5+6+5+1)

我试过这种方式:

#include <iostream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
using namespace std;

string s="96h11k4959q615948s50922o38h1453ij38w73413d5577lzrqw3780b389750vf100zd29z73j5wh73l6965n85vm77cw10awrjr29265289222238n10013uk10062f9449acbhfgcm35j78q80";
double sum;
int d;
int main()
{
    for(int i=140;i<s.size();i++)
    {
       if(isdigit(s[i]))
       {
           cout<<s[i]<<endl;
           //d= atoi(s[i].c_str());
           //another try.
           /*istringstream buffer(s[i]);
           buffer >> d;
           cout<<"int "<<d<<endl;*/
       }
    }
   return 0;
}

3 个答案:

答案 0 :(得分:2)

尝试类似:

for(int i=0;i<s.size();i++)
{
   // Read the number
   if(isdigit(s[i]))
   {
       cout<<s[i]<<endl;
       d = d * 10 + s[i]-'0' ;
   }
   else //add it when a separator is found
   {
       sum += d;
       d = 0;
   }
}

感谢P0W

答案 1 :(得分:1)

你必须先检查,是一个数字。您可以使用ascii表进行此操作。数字在48到57之间(ascii)。

答案 2 :(得分:0)

使用您的初始std::istreamstream方式:

std::istringstream buffer( s );
char c ;
do{
    long d ; 
    while( buffer >> d  ) // Keep on extracting digits until failure
    {
        sum += d ;
    }
    buffer.clear( ) ; // clear flags
}while( buffer >> c ) ; // Keep extracting chars

See Here