C++ 如何设置字母的值?C++;
嗯,我必须做一个任务,它将以独特的方式对数组中的元素进行排序 例如,如果我输入第一个字符串: BOB,我必须这样做:2+15+2(因为它们在字母表中的位置),然后除以字符数/3,对所有输入的字符串都这样做,然后按从高到低排序。:) 我的问题是,如何设置值1,2,3,4,5。。。对于A、B、C、D、E。。。。。(只有大写字母)C++ 如何设置字母的值?C++;,c++,arrays,string,letters,alphabet,C++,Arrays,String,Letters,Alphabet,嗯,我必须做一个任务,它将以独特的方式对数组中的元素进行排序 例如,如果我输入第一个字符串: BOB,我必须这样做:2+15+2(因为它们在字母表中的位置),然后除以字符数/3,对所有输入的字符串都这样做,然后按从高到低排序。:) 我的问题是,如何设置值1,2,3,4,5。。。对于A、B、C、D、E。。。。。(只有大写字母) 谢谢。如果基础编码是必需的,例如ascii letter - 'A' + 1 一种更健壮、更通用的方法是检查字符类型的类型。您需要定义一个函数 int weight(co
谢谢。如果基础编码是必需的,例如
ascii
letter - 'A' + 1
一种更健壮、更通用的方法是检查字符类型的类型。您需要定义一个函数
int weight(const std::string& s);
然后逐字符迭代字符串,并执行以下操作:
w = ch - 'A' + 1
您还可以检查字符是否在“A”和“Z”之前,或者假设
你需要更多地了解
编辑:
重量函数代码(简化):
int-weight(const-std::string&s){
整数和=0,i=0;
对于(i=0;i
要获取值,可以使用以下代码:
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]);
}
您只需将字符串转义到数组并循环通过它…如果您在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 )
const char letters[]=“abcdefghijklmnopqrstuvxyz”;
静态常量整数[256]={0};
对于(大小索引=0;索引<字母大小;++索引){
数字[字母[索引]]=索引+1;
}
断言(数字['A']==1)
断言(数字['Z']==26)
他说他有家庭作业要做,不想做……这不是家庭作业。闻起来很像,考虑到这是一个简单的解决办法……嗯,考虑到我是C++初学者,我不会去尝试解决一些复杂的和高级的挑战……嗨,JohnSmith,正如其他评论所建议的那样。如果这是家庭作业,请用标签标记。此外,还建议发布“你已经得到/尝试过的”。如果你还没有得到任何东西,也许一些伪代码会有用。他只要求大字母,你不需要使用这样的表格,你可以只使用它的ASCII值(见下面的答案),这是真的。。。我不需要小的,只要大的。我打算用ASCII方法,但我不知道怎么做。你说的“char”是什么意思?对不起,修正了,我指的是“ch”,也就是字符。ch=s[i];这是你的循环计数器,谢谢。但是它能与(std::string&s)一起工作吗?上面的一个答案说我必须使用字符。即使字符串是一个字母,它也不会以这种方式工作。我添加了一个这样的函数的工作示例。我不认为char_traits具有这样的功能。“字母”是什么意思?@R.MartinhoFernandes,我想。@StoryTeller这基本上是一个整体提升。它将char(0x41)改为int(0x41),这样不安全。它什么也不做。它不会以任何方式更改值。它所做的只是改变类型。什么是ASCII机器?@JohnSmith使用ASCII表示字符的机器,这是当今大多数机器的特点。一些大型机使用的EBCDIC有间隙,例如I和J之间,因此'J'-'I'!=1
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 )