-1

さて、配列の要素を UNIQUE 方法でソートするタスクを作成する必要があります。

したがって、たとえば、最初の文字列を入力した場合: BOB の場合、2+15+2 (アルファベットでの配置のため) を実行し、文字数 /3 で割り、すべての入力文字列に対してそれを実行し、次にそれらを最高から最低に並べ替えます。:)

私の質問は、A、B、C、D、E ..... (大文字のみ) の値を 1,2,3,4,5... に設定するにはどうすればよいかということです。

ありがとうございました。

4

4 に答える 4

2

基礎となるエンコーディングがascii.

letter - 'A' + 1

より堅牢で一般的なアプローチchar_traitsは、文字タイプの を調べることです。

于 2013-02-28T14:35:13.817 に答える
2

関数を定義する必要があります

int weight(const std::string& s);

次に、文字列 char を char ごとに繰り返し、次の操作を行います。

w = ch - 'A' + 1

文字が「A」と「Z」の前にあることを確認するか、それを想定することもできます。

ASCIIについてもっと読む必要があります

編集: 重み関数のコード(簡略化):

int weight(const std::string& s) {
    int sum = 0, i = 0;
    for(i = 0; i < s.size(); i++) {
        char ch = s[i];
        sum += ch - 'A' + 1;
    }
    return sum/i;
}
于 2013-02-28T14:36:53.143 に答える
1

ASCII マシンで作業している場合は、@StoryTeller の回答が機能します。それ以外の場合は、2 つの間でマップする配列を作成できます。

const char letters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
static const int numbers [ 256 ] = { 0 };

for ( size_t index = 0; index < sizeof letters; ++index ) {
    numbers [ letters [ index ] ] = index + 1;
}

assert ( numbers [ 'A' ] == 1 )
assert ( numbers [ 'Z' ] == 26 )
于 2013-02-28T14:39:29.470 に答える
0

値を取得するには、次のコードを使用できます。

int getValue(char which)
    {
    int ret = 0;
    switch(which)
       {
       case 'a' : ret = 1 ; break;
       case 'A' : ret = 27 ; break;
       case 'b' : ret = 2 ; break;
       case 'B' : ret = 28 ; break;
       // and so on....
       }
    return ret;
    }
  int result = 0;
  while(....)
     {
     result = result + getValue(myarray[counter]);
     }

文字列を配列にエスケープしてループするだけです...

于 2013-02-28T14:37:23.970 に答える