查找字符数组中的数字总和

finding sum of numbers in a char array

本文关键字:数字 字符 数组 查找      更新时间:2023-10-16

>我正在尝试查找字符数组中数字的总和。

我的代码适用于大多数情况。例:a=dasn344wee22ee,输出为:366 - 这很好

但是当我的字符是,例如: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;
}

在你的函数int getnr(char a[], int i, int j)中,你忘了用 null 终止字符串sir,这样atoi(sir)可能会产生一个垃圾值(实际上行为是未定义的(。以下内容应该会有所帮助:

int getnr(char a[], int i, int j)` {
    ...
    sir[counter] = '';
    return atoi(sir);
}

问题是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] = '';
    return atoi(sir);
}

问题出在代码的这一部分:

if (i == strlen(a) - 1)
{
   s += getnr(a, i, strlen(a));
}

具体来说,如果您的最后一个数字是一个数字(确实如此(,它将始终返回垃圾。

因此,我将更改为仅将 char 数组的单个字符转换为数字并将其转换为 int s。

编辑:出于某种原因,在做s+= a[i]时,我返回垃圾。但是,执行以下操作可以解决问题:

if (i == strlen(a) - 1)
{
    string x;
    x[0] = a[i];
    int l = stoi(x);
    s += l;
}

我知道有一种更有效的方法,但我不确定为什么s+= a[i]本身会返回错误数字。