0

我正在尝试创建一个散列函数。该算法要求我提取字符串的每个字母并将其转换为 ASCII;将其乘以基于其在字符串中的位置的数字(例如,输入为 STACK;'S' 的 ASCII 将是 344,将该值乘以 9^9 然后 'T' 的 ASCII 将是 347 将该值乘以 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;
}
4

1 回答 1

2

for循环中的条件是错误的,应该是

for(int x=0; x < input.size(); x++)

使用您的代码,第二次执行循环的主体xinput.size()并且太大而无法访问input[x]- 导致您看到的错误。


我不确定我是否 100% 了解预期的算法,但这可能会有所帮助:

int myPow(int x, int p)
{
  if (p == 0) return 1;
  if (p == 1) return x;
  return x * myPow(x, p-1);
}

然后循环:

for(int x=0; x < input.size(); x++)
{
    finalanswer += input[x] * myPow(9-x);

    cout << finalanswer ;
}
于 2013-03-29T22:46:37.670 回答