我试图在char数组中找到数字的总和。
我的代码适用于大多数情况。示例:a=dasn344wee22ee
,输出为:366
- 这是好的
但是当我的char是,例如:andre54e5
时,输出应为59
,但程序会显示:108
。
有谁可以告诉我这是什么问题?
#include <iostream>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
using namespace std;
int getnr(char a[], int i, int j)
{
int counter = 0;
char sir[1000];
for (int x = i; x<j; x++)
{
sir[counter] = a[x];
counter++;
}
return atoi(sir);
}
int main()
{
char a[1000];
int s = 0, inceput, finals;
cin.getline(a, 255);
for (int i = 0; i<strlen(a); i++)
{
if (isdigit(a[i]) )
{
if (i == strlen(a) - 1)
{
s += getnr(a, i, strlen(a));
}
for (int j = i + 1; j<strlen(a); j++)
{
if (!isdigit(a[j]) || j == strlen(a) - 1)
{
s += getnr(a, i, j + 1);
i = j;
break;
}
}
}
}
cout << s;
return 0;
}
答案 0 :(得分:1)
在函数--build-optimizer=false
中,您忘记了空终止字符串int getnr(char a[], int i, int j)
,这样sir
可能会产生垃圾值(实际上行为未定义)。以下内容应该有所帮助:
atoi(sir)
答案 1 :(得分:0)
问题是getnr()
没有向sir
数组添加空终止符,因此当您调用atoi(sir)
时,您将获得未定义的行为。
int getnr(char a[], int i, int j)
{
int counter = 0;
char sir[1000];
for (int x = i; x<j; x++)
{
sir[counter] = a[x];
counter++;
}
sir[counter] = '\0';
return atoi(sir);
}
答案 2 :(得分:0)
问题出在这部分代码中:
if (i == strlen(a) - 1)
{
s += getnr(a, i, strlen(a));
}
具体来说,如果您的最后一个数字是一个数字(它是),它将始终返回垃圾。
因此,我将更改为仅将char数组的单个char转换为数字,并将其转换为int。
修改的:
出于某种原因,在做s+= a[i]
时,我会返回垃圾。
但是,执行以下操作,可以解决问题:
if (i == strlen(a) - 1)
{
string x;
x[0] = a[i];
int l = stoi(x);
s += l;
}
我知道有一种更有效的方式,但我不确定为什么s+= a[i]
本身会返回错误的数字。