C++怪异的分布流行为
C++ Weird istringstream behaviour
我为自己是C++新手而道歉。我正试图通过翻译Java中的一些代码来学习。
在该代码中,读入的字符串表示一种语言中的字母频率(%(。
正如测试代码所示,我们正在处理的测试字符串是a10b10c10d10e10f50
。
在下面的循环中,前3个值(0.1、0、1、0.1(以及第5个和第6个(0.1和0.5(被正确读入,但根据Visual Studio中的调试器,由于某种原因,当i
为9时,字母"d"的第4个值被读入为1000000000.0000000
。有什么想法吗?
#include <iostream>
#include <vector>
#include <sstream>
#include <string>
#include <cmath>
using namespace std;
class SymbolFrequency {
public:
double language(vector <string> frequencies, vector <string> text) {
for (unsigned int fset = 0; fset < frequencies.size(); fset++) {
double expected[26];
fill(expected, expected + 26, 0.0);
for(unsigned int i = 0; i < frequencies[fset].length(); i += 3) {
char letter = frequencies[fset][i];
istringstream is(frequencies[fset].substr(i + 1, i + 3));
double freq;
is >> freq; freq /= 100;
expected[letter - 'a'] = freq;
}
...
测试代码:
int main() {
SymbolFrequency s;
const char *fargs[] = {"a10b10c10d10e10f50"};
vector<string> f(fargs, fargs + 1);
vector<string> t;
t.push_back("abcde g");
double d = s.language(f,t);
cout << (d) << endl;
cin.get();
return 0;
}
您没有正确调用substr((;尝试frequencies[fset].substr(i + 1, 2)
。
(这个奇怪值的原因是它将10e10
解析为1000亿。(
相关文章:
- c++binary_search函数排序数组(流行名称搜索)出现问题
- 改变或缩放两个正态分布以具有特定的相关系数
- 如何创建没有特定定义的随机分布?uniform_int_distribution是从其他类继承的吗?
- 流行"Debug Assertion Failed"
- C++随机数分布传递给函数
- 从转换后的容器元素创建离散分布
- 从 C++ 函数与 Python 函数返回的不一致值用于偏斜正态分布
- 在编译时选择随机数分布
- C++:创建1000次唯一的随机分布,在任何分布中都没有重复的数字
- c++在循环中定义一组概率分布
- 分布MPI散点错误的数字
- 无法按 lambda 中的值捕获随机分布和生成器?
- 离散分布不对称
- 如何在C++中将函数值更改为表中的值(伽马分布)?
- 在运行时为随机分布类成员设置最小和最大边界?
- 逆生存函数与正态分布的PPF(ICDF)?
- 多态性与C++11分布
- 从提升二项分布中抽取随机数
- 在 c++ 中创建具有指数分布的随机数(可视化标准)
- 将值均匀分布到数组中