0

ハッシュ関数を作成しようとしています。このアルゴリズムでは、文字列の各文字を取得して ASCII に変換する必要があります。文字列内の位置に基づいた数値で乗算します (たとえば、入力はスタックです。'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++)

あなたのコードでは、ループの本体が 2 回目に実行され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 に答える