我正在尝试创建一个散列函数。该算法要求我取字符串的每个字母并将其转换为ASCII;将它乘以一个基于其在字符串中的位置的数字(例如,输入是STACK;'S'的ASCII将是344,将该值乘以9 ^ 9,然后'T'的ASCII将乘以该值乘以8 ^ 8 ..等);然后将值一起添加。
我理解如何访问数组中的值来创建总和,并将它们转换为ASCII。我不明白如何访问数组来执行中间的计算。
当我构建程序时,我也得到“断言失败错误”。我查了一下错误,它说它与坏的调用有关,但我在代码中看不到任何不良调用。
我的代码如下:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string input ;
int finalanswer = 0;
cout << "Enter your first name please : " ;
cin >> input;
cout << "Your name is " << input ;
for (int x=0; x=input.size(); x++)
{
finalanswer += input[x];
cout << finalanswer ;
}
cin.get();
return 0;
}
答案 0 :(得分:2)
for循环中的条件是错误的,它应该是
for(int x=0; x < input.size(); x++)
使用您的代码,第二次执行循环体[{1}}为x
且太大而无法访问input.size()
- 导致您看到的错误。
我不确定我是否理解100%的预期算法,但这可能有所帮助:
input[x]
然后循环:
int myPow(int x, int p)
{
if (p == 0) return 1;
if (p == 1) return x;
return x * myPow(x, p-1);
}