2013-02-28 76 views
-1

那么,我必须做一个任务,它将以UNIQUE方式对数组元素进行排序。例如,如果我输入第一个字符串: BOB,我必须这样做:2 + 15 + 2(因为它们在字母表中的位置),然后除以字符数量/ 3,然后为所有输入的字符串,然后按高到低排序。 :)如何设置字母的值? C++

我的问题是,我如何设置值1,2,3,4,5 ...为A,B,C,D,E .....(只有大写字母)。

谢谢。

+1

他的意思是他有功课要做,不想做... – 2013-02-28 14:38:06

+0

这不是功课。 – 2013-02-28 14:41:06

+0

闻起来很喜欢它,考虑到这是一个简单的解决方案... – 2013-02-28 14:42:28

回答

2

如果底层编码是seuqential,例如ascii

letter - 'A' + 1 

一个更强大和通用的方法,是检查字符类型的char_traits

+1

我不认为char_traits有什么需要这个。 – 2013-02-28 14:42:45

+0

“信”是什么意思? – 2013-02-28 14:43:00

+0

@ R.MartinhoFernandes,我记住了[char_traits :: to_int_type](http://en.cppreference.com/w/cpp/string/char_traits/to_int_type)。 – StoryTeller 2013-02-28 14:44:17

2

您需要定义一个函数

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

然后遍历由字符的字符串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; 
} 
+0

“char”是什么意思? – 2013-02-28 14:42:07

+0

对不起,固定的,我的意思是“ch”,这是字符。 ch = s [i];我在哪里它是你的循环计数器。 – SlavaNov 2013-02-28 14:45:34

+0

谢谢。但它会工作(std :: string & s);?上面的答案之一说我必须使用一个字符,即使该字符串是一个字母,它不会这样工作.. – 2013-02-28 14:53:28

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]); 
    } 

你只需要将字符串转义为数组并通过它循环...

+0

他只问大字母,你不需要使用这样的表格,你可以使用它的ASCII值(见下面的答案) – SlavaNov 2013-02-28 14:38:17

+0

这是真的......我不需要小字符,只有很大。使用ASCII方法,除了我不知道如何去做 – 2013-02-28 14:40:11

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) 
+0

什么是ASCII码机? – 2013-02-28 14:54:40

+0

@JohnSmith是一台使用ASCII字符表示的机器,它是现在大多数机器中的一种,一些大型机使用EBCDIC http ://en.wikipedia.org/wiki/EBCDIC,例如I和J之间有空白,所以'J' - 'I'!= 1' – 2013-02-28 15:15:46