好吧,我必须完成一项任务,它将以UNIQUE的方式对数组元素进行排序。
所以,例如,如果我输入第一个字符串: BOB,我必须这样做:2 + 15 + 2(因为它们在字母表中的位置),然后除以chars / 3的数量,并对所有输入的字符串执行此操作,然后按从最高到最低排序。 :)
我的问题是,如何为A,B,C,D,E ......设置值1,2,3,4,5 ......(只有大字母)。
谢谢。
答案 0 :(得分:2)
答案 1 :(得分:2)
您需要定义一个函数
int weight(const std::string& s);
然后通过char迭代字符串char并执行以下操作:
w = ch - 'A' + 1
你也可以检查char是在'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;
}
答案 2 :(得分:1)
如果您正在使用ASCII机器,@ StoryTeller的答案可行。否则,您可以创建一个数组以在两者之间进行映射:
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 )
答案 3 :(得分: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]);
}
你只需要将字符串转义为数组并循环遍历它......