如何对一串数字求平均值?使用C++。

3

我遇到了一个问题,正在尝试解决。

如果我有一个带空格的数字字符串,例如“10 20 30 40”,我是否可以将这些数字相加并计算它们的平均值?

我尝试了下面的代码,但返回了“nan”,所以我不知道自己做错了什么。

for (int i = 0; i < numLength; i++)
{
    num = grades.at(i) - '0';
    total += num;
    countNum++;
}

cout << firstName << " " << lastName << " average: " << (total/countNum) << endl;

3
使用std::istringstream代替尝试确定哪些是数字和哪些不是数字。 - PaulMcKenzie
有没有办法将这些数字相加并求平均值?-- 您正在使用C++。如果像C++这样强大的语言无法从一串数字中获取平均值,那将是令人震惊的。 - PaulMcKenzie
2个回答

7

不必手动解析数据,可以使用std::istringstream

#include <string>
#include <sstream>
#include <iostream>

int main()
{
   std::string test = "10 20 30 40";
   int count = 0;
   double total = 0.0;
   std::istringstream strm(test);
   int num;
   while ( strm >> num )
   {
       ++count;
       total += num;
   }
   std::cout << "The average is " << total / count;
}

输出:

The average is 25

谢谢回复!由于我是初学者,您能否请解释一下如何使用命名空间std来键入istringstream函数?谢谢! - Sesame
不确定你想表达什么。如果您需要对该类的初学者解释,std::istringstream 就像您从键盘输入这些数字一样工作。 - PaulMcKenzie

0
使用 std::istringstream 解析字符串,例如:
#include <iostream>
#include <string>
#include <sstream>
...

std::istringstream iss(grades);
while (iss >> num) {
    total += num;
    ++countNum;
}
std::cout << firstName << " " << lastName << " average: " << (total/countNum) << std::endl;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接