Int到Char数组(部分总和)

时间:2014-05-28 20:32:30

标签: c++

“tab”输出有问题。我的程序将显示部分金额。 我想在tab数组中保存那些部分和,但它只显示第一个总和。

这是我写的代码:

const char numbers[] = { "1 2 3 4" };
cout << numbers << endl;
for (int i = 0; i < strlen(numbers); ++i)
{
    if (numbers[i] != ' ') cout << numbers[i] << endl;  
}
int sum = 0;
char tab[20];
for (int i = 0; i < strlen(numbers); ++i){
    if (numbers[i] != ' ') {
        sum += atoi(&numbers[i]);
        _itoa_s(sum,&tab[i],sizeof(tab),10);
    }
}
cout << tab;
_getch();
return 0;

我如何能够显示适当的部分总和,如:1 3 6 10

4 个答案:

答案 0 :(得分:1)

sizeof以字节为单位显示数组的大小,而不是数组中元素的数量。

这样的东西会给你元素的数量:

int num_element = sizeof(numbers)/sizeof(numbers[0]);

或完整解决方案:

const char numbers[] = { "1 2 3 4" };
int num_elements = sizeof(numbers)/sizeof(numbers[0]);
cout << numbers << endl;
for (int i = 0; i < num_elements; ++i)
{
    if (numbers[i] != ' ') cout << numbers[i] << endl;  
}
int sum = 0;
char tab[20];
for (int i = 0; i < num_elements; ++i){
    if (numbers[i] != ' ') {
        sum += atoi(&numbers[i]);
        _itoa_s(sum,&tab[i],sizeof(tab),10);
    }
}
cout << tab;
_getch();
return 0;

虽然将num_element替换为for循环后上述内容应该有效,但我建议你调查一下std::arraystd::vector

答案 1 :(得分:0)

您没有在这里检索数组的大小。

使用SIZEOF_ARRAY获取C中的数字大小。

但你标记了C ++,所以考虑使用std :: array&lt;&gt;而不是C风格的数组(它会为你公开数组的大小)

答案 2 :(得分:0)

首先,cout << tab;仅打印第一个元素。

其次,不是将结果写入tab[i],而是创建int cnt = 0; _itoa_s(sum,&tab[cnt],sizeof(tab),10); cnt++通过这种方式,您在选项卡数组中不会有空字符。

第三,您可以保留int tab[20],而不是留在char tab[]

至此,int num_elem = sizeof(numbers)/sizeof(numbers[0]);(如上所述)。

答案 3 :(得分:0)

您的代码有几个问题。第一个是函数atoi将返回一个错误,因为它将考虑从&amp; numbers [i]开始直到终止零的所有字符串。另一个问题是表达式

_itoa_s(sum,&tab[i],sizeof(tab),10);

使用tab [i]不正确。

请尝试以下代码。

#include <iostream>
#include <cstring>
#include <cctype>
#include <cstdio>

//...
const char numbers[] = { "1 2 3 4" };

char tab[20];

char *p = tab;

int sum = 0;
for ( size_t i = 0, n = std::strlen( numbers ); i < n; i++ )
{
    if ( std::isdigit( numbers[i] ) )
    {
        sum += numbers[i] - '0';
        p += std::sprintf( p, "%d ", sum );
    }
}

std::cout << tab << std::endl;

至少我得到了输出

1 3 6 10

最好使用std::istringstream代替提取数字的for循环。