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的方式排列它
我可以想到两种不同的解决方法,第一种,您可以使用节点的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 << ", ";
}
不利之处在于,它不会考虑重复项,只会成为每个字母的最后一个实例
关于另一种方法,您可以为字母表中的每个字母扫描一次列表,然后立即打印出来,但这会花费更多的时间,但是会造成重复。