查找char数组中的数字总和

时间:2018-01-12 22:12:07

标签: c++ arrays sum numbers

我试图在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;
}

3 个答案:

答案 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]本身会返回错误的数字。