2

関数は文字列引数を取る必要があります

string return_average(string x)<---関数に("abc678")を渡したとしましょう

整数値または倍精度値を平均として返します。

奇妙な結果が得られます: たとえば、123abc を渡すと、2 ではなく 50 が返されます (3 つの数値 (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注: デバッガーでコードをステップ実行しようとした場合、予想される値 (1、2、3) ではなく大きな値 (49、50、51) でインクリメントされているため、問題はすぐに明らかになります。

于 2013-09-17T09:33:03.447 に答える
0

文字の場合、n=(int)c の代わりに n+=(c-'0') を使用します

于 2013-09-17T09:42:40.690 に答える