查找字符数组中的数字总和
finding sum of numbers in a char array
>我正在尝试查找字符数组中数字的总和。
我的代码适用于大多数情况。例: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]
本身会返回错误数字。
相关文章:
- 递归形成字符串中所有数字字符的中间和?
- C++ 从 std::string 中删除所有非数字字符
- 如何返回一串字母数字字符中的最大值(例如-1A003B3)?
- 有没有办法将最初作为字符串输入的数字字符数组复制到双向链表中
- 如何使用 c++ 将数字字符转换为字符串
- 从字符数组中修剪非字母数字字符的功能
- 使用find_if和isalnum在字符串中找到字母数字字符
- 循环直到整数输入在所需范围内无法处理非数字字符输入
- 确保字符串只包含字母数字字符的更好方法
- 用C++计算文本文件中的字母数字字符
- 使用cctype库搜索函数,以查找某个范围内的数字字符数
- 在读取C++行时过滤非字母数字字符
- C++ 如何从标准输入加载到最多 5 个字母数字字符的字符数组
- 如何知道小部件是否只接受数字字符
- 在 C++ STL 中,如何使用 regex_replace 从 std::string 中删除非数字字符
- i18n 去除非字母数字字符的友好方式
- 将字符数组拆分为字母数字字符和非字母数字字符
- 将多数字字符数转换为整数
- 在检测字符串是否包含数字字符时,这有什么问题
- 如何检测QString是否由所有数字字符组成