无法弄清楚如何使用c ++中的链接列表从a到z顺序显示字母

问题描述 投票:0回答:1
void alphaout()
 {
   nodealpha *curr;
   nodealpha *curr2;
   curr = first;
   curr2 = first;

while (curr != NULL)
 {
   char al1 = curr2 -> alpha;
   char al2 = curr -> alpha;
   if (al1 < al2)
    {
      curr2 = curr;
    }
 std::cout << "ALPHABET : " << curr -> alpha << endl;
 curr = curr -> next;
 }
}

我做了一个简单的程序,用户输入每个字母,然后按其顺序显示,而不管用户输入字母的方式如何,但是问题是,当显示字母时,它们以与用户相同的顺序显示给定输入,我无法弄清楚如何以Z的方式排列它

c++ c++11 linked-list c++-cli singly-linked-list
1个回答
0
投票

我可以想到两种不同的解决方法,第一种,您可以使用节点的ascii代码的索引将节点的地址保存在数组中:


// here is a function i made for an old project which will give you the index in an array 
//of any char you pass to it (sorry for spanish comments but that's my my teacher //asked for)
int position(char letter)
{
    int valor;
    //A-ascii 65 -> posicion 0  a-ascii 97 -> 0
    //Z-ascii 90 -> posicion 25  z->ascii 122 - 25
    if(letra>='A' && letra <='Z')
        valor = letra - 65;
    else if(letra >='a' && letra<='z')
        valor = letra-97;
    else
        valor= 26; //
    return valor;
}


// this is what i would put in your alphaout function to store the ponters
// here we save the pointers to each letter
nodealpha *alpha[size of your aplhabet];

while(curr != NULL){
    alpha[position(curr->alpha)] = curr;
    curr = curr->next;
}
// after this you can just print the array
cout << "alphabet: " << endl;
for(int i = 0; i < (size of alphabet); i++){
    cout << alpha[i]->alph << ", ";
} 

不利之处在于,它不会考虑重复项,只会成为每个字母的最后一个实例

关于另一种方法,您可以为字母表中的每个字母扫描一次列表,然后立即打印出来,但这会花费更多的时间,但是会造成重复。

© www.soinside.com 2019 - 2024. All rights reserved.