C++一道编程哪错了 编写一个程序,输入一个字符串,从字符串中提取有效的数字,输出它们的总和。

#include<iostream>#include<string>#include<iomanip>usingnamespacestd;doublefunction1(... #include <iostream>
#include <string>
#include <iomanip>
using namespace std;
double function1(int b1, int b2, string s);
double function2(int b1, int b2, string s);
int main()
{
string s;
int len = s.length();
int i, j, b1, b2=0;
double sum;
sum = 0;
getline(cin, s);
for (i = 0; i < len; ++i)
{

if (s[i] >= '0' && s[i] <= '9')
{
b1 = i;
for (j = b1;j < len;++j)
{
int b2 = 0;
if (s[j] >= '0' && s[j] <= '9')
b2 = j;
else break;
}
sum = sum + function1(b1, b2, s);
i = b2;
}

if (s[i] == 46)
{
b1 = i + 1;
for (j = b1;j < len;++j)
{
if (s[j] >= '0' && s[j] <= '9')
{

b2 = j;
}
else break;
}
sum = sum + function2(b1, b2, s);
i = b2;
}

}
cout << endl << "字符串中有效的数字的总和为:" << sum << endl << endl;
system("pause");

return 0;

}

double function1(int b1, int b2, string s)
{
double sum = 0;

for (int i = b1; i <= b2; ++i)
sum = sum * 10 + ((unsigned __int64)s[i] - '0');

return sum;
}
double function2(int b1, int b2, string s)
{
double sum = 0;
for (int i = b1; i <= b2; ++i)
sum = sum / 10 + ((unsigned __int64)s[i] - '0');
return sum / 10;
}
展开
 我来答
White_MouseYBZ
2019-10-19 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6573万
展开全部

本来想改一改,改着改着改得太多,重写一个供参考——

代码资料:

//#include "stdafx.h"//If the vc++6.0, with this line.

#include <string>

#include <iostream>

#include <iomanip>

using namespace std;

int function1(int &i, string s){

int sum;

for(sum=0;s[i]>='0' && s[i]<='9';i++)

sum = sum * 10 + s[i] - '0';

return sum;

}

int main(int argc,char *argv[]){

string s;

int len,i,sum=0;

cin >> s;

len = s.length();

for(i = 0; i < len; ++i)

if(s[i] >= '0' && s[i] <= '9'){

sum+=function1(i,s);

i--;

}

cout << endl << "字符串中有效的数字的总和为:" << sum << endl << endl;

system("pause");

return 0;

}

追问
要考虑小数情况
追答

那就改一下吧——

代码资料:

//#include "stdafx.h"//If the vc++6.0, with this line.

#include <string>

#include <iostream>

#include <iomanip>

using namespace std;

double function1(int &i, string s){

double sum,k;

for(sum=0.0;s[i]>='0' && s[i]<='9';i++)

sum = sum * 10 + s[i] - '0';

if(s[i]=='.')

for(k=10.0,i++;s[i]>='0' && s[i]<='9';k*=10,i++)

sum+=(s[i]-'0')/k;

return sum;

}

int main(int argc,char *argv[]){

string s;

int len,i;

double sum=0.0;

cin >> s;

len = s.length();

for(i = 0; i < len; ++i)

if(s[i] >= '0' && s[i] <= '9' || s[i]=='.'){

sum+=function1(i,s);

i--;

}

cout << endl << "字符串中有效的数字的总和为:" << sum << endl << endl;

system("pause");

return 0;

}

牛奶不喝奶
2019-10-19 · 初出茅庐
牛奶不喝奶
初出茅庐
采纳数:15 获赞数:37
国家奖学金获得者,优秀毕业生,第九届蓝桥杯国赛三等奖

向TA提问 私信TA
展开全部

我觉得你是不是把题目想复杂了,如果是只是记和的话,我觉得只是这样写就可以了

如果是,提取数字的话,这样写就可以了

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2019-10-20
展开全部
我没看完,不过我觉得你的 len赋值是不是太早了,在你还没输入字符串s的时候,你的len=s.length() 似乎值是0吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
microroom
科技发烧友

2019-10-19 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:7118
采纳率:83%
帮助的人:1597万
展开全部
#include<iostream>
#include<cstdlib>

#define BufLen 256

using namespace std;

char buf[BufLen];

int main()
{
const string Digital="0123456789";
string s;
int start=0,end;
long long sum=0;

cin.getline(buf,BufLen);
s.assign(buf);
do
{
start=s.find_first_of(Digital,start);
if(string::npos!=start)
{
end=s.find_first_not_of(Digital,start+1);
if(string::npos==end)
end=s.length();
sum+=atol(s.substr(start,end-start).c_str());
start=end+1;
}
}while(string::npos!=start);
cout<<sum<<endl;
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
vnclight
2019-10-19 · TA获得超过952个赞
知道小有建树答主
回答量:1169
采纳率:67%
帮助的人:64.1万
展开全部

1234567891011121314151617181920212223242526272829#include <stdio.h> int main(void) {  char str[100];  int i, s= 0;  printf("请输入一个字符串:");  gets(str);  for(i = 0;  str[i];i ++)  {     if(str[i] >= '0' && str[i] <= '9')      s = s + str[i]-'0';  }  printf("字符串各数字之和为:%d\n",s);  return 0; }

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式