2014-02-16 94 views
0

我需要平均數組中的分數。我在書中找到的所有內容都說明了你是如何做到的。在「+ =」處有一個錯誤,指出「沒有操作符」+ =「匹配這些操作數。」不知道我做錯了什麼......陣列的平均得分

double calculateAverageScore(string score[],int numPlayers, double averageScore) 
{ 
double total; 
for (int i = 0; i < numPlayers; i++) 
{ 
    total += score[i]; 
} 
averageScore = total/numPlayers; 
    cout << "Average: " << averageScore << endl; 
} 
+0

你必須分析score'的'雙打弦或浮動以便使用'+ ='。 – Netwave

+0

你不能將'std :: string'添加到'double'。 –

回答

3

scorestd::string秒的陣列。您不能使用字符串執行算術運算。 要做到你想要什麼,你必須之前將它們轉換爲雙打:

total += std::stod(score[i]); 
+0

另外,for循環之前需要將'total'初始化爲0。 –

1

分數是一個字符串數組,你需要的數字陣列(可能是整數)

0

您不能添加元素的字符串。您必須更改參數的類型,或者您可以嘗試將該字符串轉換爲雙精度字符

+0

它可能不是必需的。有很多方法可以將字符串轉換爲整數或雙精度。只需要檢查蜇傷的有效性,如果它們是數字。 –

+0

你是對的我編輯它 – Rooxo

1

不清楚爲什麼要將分數保存在std::string的數組中。在算術運算中不得使用std::string類型的對象。你需要輸入字符串的std ::的對象轉換爲某種類型的算術例如以int

例如

total += std::stoi(score[i]); 

而且你的函數未定義行爲,因爲它沒有返回值,函數的第三個參數是不必要的。你忘了初始化變量總數。

我會寫的函數通過以下方式

double calculateAverageScore(const string score[], int numPlayers) 
{ 
    double total = 0.0; 

    for (int i = 0; i < numPlayers; i++) 
    { 
     total += stoi(score[i]); 
    } 

    return ( numPlayers == 0 ? 0.0 : total/numPlayers); 
} 

,並在主要它可以被稱爲

cout << "Average: " << calculateAverageScore(YourArrayOfStrings, NumberOfElements) << endl; 

取而代之的是循環的,你可以使用標準的算法std::accumulate在頭<numeric>聲明。例如

double total = std::accumulate(score, score + numPlayers, 0); 
0
double

除了和std::string轉換,如果你想了解更多的統計特性有關數據,我會推薦Boost Accumulator

#include <algorithm> 
#include <iostream> 
#include <vector> 

#include <boost/accumulators/accumulators.hpp> 
#include <boost/accumulators/statistics/stats.hpp> 
#include <boost/accumulators/statistics/mean.hpp> 
using namespace boost::accumulators; 

int main() 
{ 
    std::vector<double> data = {1.2, 2.3, 3.4, 4.5}; 

    accumulator_set<double, stats<tag::mean> > acc; 

    acc = std::for_each(data.begin(), data.end(), acc); 

    std::cout << "Mean: " << mean(acc) << std::endl; 
    return 0; 
}