#include <iostream>
#include <cstdio>
#include <stdlib.h>
#include <string>
#include <stack>
#include <cctype>
#include <assert.h>
#include <iomanip>
using namespace std;
int my_strlen(const char *str)
{
assert(str);
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char s[10001];
cin >> s;
char temp[10001];
int integer[10001];
int counti = 0;
int decimal[10001];
int countd = 0;
char low[10001];
char upp[10001];
int len = my_strlen(s);
int i, j;
int count0 = 0;
int count1 = 0;
int l = -1;
bool isB = false;
for (i = 0; i < len; i++)
{
if (s[i] == '.' || isdigit(s[i]))
{
if (l = -1)
{
l = i;
}
if (s[i] == '.')
{
isB = true;
}
}
else
{
if (l != -1)
{
char *temp = (char *)malloc((i - l + 1) * sizeof(char));
for (j = 0; j < i - l; j++)
{
temp[j] = s[j + l];
}
double number = atof(temp);
cout << "temp is" << temp << endl;
if (isB)
{
decimal[countd] = number;
countd++;
}
else
{
integer[counti] = number;
counti++;
}
isB = false;
l = -1;
}
if (islower(s[i]))
{
int lenupp = my_strlen(upp);
s[i] = toupper(s[i]);
upp[lenupp] = s[i];
count0++;
}
else
{
int lenlow = my_strlen(low);
s[i] = tolower(s[i]);
low[lenlow] = s[i];
count1++;
}
}
}
//打印整数integer
double numint = 0.0;
for (i = 0; i < counti; i++)
{
numint += integer[i];
}
cout << numint << endl;
//打印小数decimal
double numdec = 0.0;
for (i = 0; i < countd; i++)
{
numdec += decimal[i];
}
cout << fixed << setprecision(2) << numdec << endl;
//打印小写字母
for (i = 0; i < count1; i++)
{
cout << low[i];
}
cout << endl;
//打印大写字母
for (i = 0; i < count0; i++)
{
cout << upp[i];
}
return 0;
}
中间的这一部分

为什么我测试出来它不能做到把整个temp数组里面的数合并为数字?给一个测试样例
