我正在尝试将字符串的某些数字转换为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;
}
答案 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
强>