2

该函数应采用字符串参数

string return_average(string x)<---假设我们将("abc678") 传递给函数

并返回一个整数或双精度值作为平均值..

我得到了奇怪的结果:例如,当我通过 123abc 它返回 50 而不是 2(三个数字的平均值(1,2,3)..任何想法?这里是代码:

int retav(string x)

{
    int k=0;
    int average=0;
    int j=0;
    int n = 0;
    char c='a';
    string mySt = x;    
    int L = mySt.length()-1;
    for(int i=0;i<=L;i++)
    {
    c = mySt.at(i);

    if(isdigit(c))
    {
        n+=(int)c;
        j++;
    }
    }

    average = n/j;
    return average;
}
4

3 回答 3

4

您正在添加字符代码(很可能是 ASCII 代码)而不是数值。改变:

    n+=(int)c;    // accumulate character code

至:

    n+=(c - '0'); // convert character to numeric value and accumulate

注意:如果您尝试在调试器中单步执行您的代码,问题将立即显而易见,因为n它会以大值(49、50、51)而不是预期值(1、2、3)递增。

于 2013-09-17T09:33:03.447 回答
2

是的,您正在添加 ASCII 值,因为它从 123abc 返回 50=((49+50+51)/3) 的输出中可见,请记住 (int)c 将 'c' 转换为其 ASCII 值,因此您可以删除 48(ASCII值 0) 从 n 或做 n+=(c - '0');

于 2013-09-17T09:48:44.737 回答
0

对于字符使用 n+=(c-'0') 而不是 n=(int)c

于 2013-09-17T09:42:40.690 回答