如何计算包含数字和字母的字符串的平均值?

时间:2013-09-17 09:30:01

标签: c++ string int average

该函数应采用字符串参数

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;
}

3 个答案:

答案 0 :(得分: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)。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

用于角色使用     的n + =(C-'0' ) 而不是n =(int)c