さて、配列の要素を UNIQUE 方法でソートするタスクを作成する必要があります。
したがって、たとえば、最初の文字列を入力した場合: BOB の場合、2+15+2 (アルファベットでの配置のため) を実行し、文字数 /3 で割り、すべての入力文字列に対してそれを実行し、次にそれらを最高から最低に並べ替えます。:)
私の質問は、A、B、C、D、E ..... (大文字のみ) の値を 1,2,3,4,5... に設定するにはどうすればよいかということです。
ありがとうございました。
関数を定義する必要があります
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;
}
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 )
値を取得するには、次のコードを使用できます。
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]);
}
文字列を配列にエスケープしてループするだけです...