【问题标题】:code gives out ASCII numbers instead of characters代码给出 ASCII 数字而不是字符
【发布时间】:2015-05-21 07:54:59
【问题描述】:

此代码是 RedBlack Tree 程序的一部分,它应该接收“ADSOMERT”并将其字符排序为“A D E M O R S T”的中序形式。它可以完成这项工作,但每个字符的 ASCII 数字为“65 68 69 77 79 82 83 84”。

主要功能:

int main()
{

    Tree char_tree = Tree();

    cout << "Eingabe: ADSOMERT" << endl;

    char_tree.insert('A');
    char_tree.insert('D');
    char_tree.insert('S');
    char_tree.insert('O');
    char_tree.insert('M');
    char_tree.insert('E');
    char_tree.insert('R');
    char_tree.insert('T');

    cout << "ADSOMERT in In-Order" << endl;

    char_tree.print_inorder();
}

insert 和 rb_insert 函数:

void Tree::insert(int x)
{
    ...
}

void Tree::rb_insert(Node *& node, Node *&parent, int x, bool sw)
{
    ...
}

inorder 和 print_inorder 函数:

void Tree::print_inorder()
{
    inorder(head->right);
    cout << endl;
}


void Tree::inorder(Knote* node)
{
    if (node != nullptr)
    {
        inorder(node->left);
        cout << node->item << " ";
        inorder(node->right);
    }
}

Node 和 Tree 的类依赖关系:

节点.h

class Node {
public:
    Node(int data = 0);
    bool red;
    int item;
    Node *left;
    Node *right;
    Node *parent;
};

节点.cpp

Node::Node(int data)
{
    this->item = data;

    parent = nullptr;
    left = nullptr;
    right = nullptr;
    red = true;
}

【问题讨论】:

  • 您的insert 采用int 而不是char 您期待什么?
  • 我用新的Node(char data) 创建了一个新的insert(char x),但没有任何改变...
  • 请记住,您不必发布所有代码。这是good guide 你应该发布的是 print_inorder 函数
  • 好的,我现在编辑帖子...
  • 正如 Kyho 指出的那样,您的数据成员类型也是 int,因此即使您的参数是 char,您也可以进行类型转换

标签: c++ char ascii red-black-tree


【解决方案1】:
void Tree::inorder(Knote* node)
{
    if (node != nullptr)
    {
        inorder(node->left);
        cout << node->item << " ";
        inorder(node->right);
    }
}

class Node {
public:
    Node(int data = 0);
    bool red;
    int item;
    Node *left;
    Node *right;
    Node *parent;
};

您正在输出 node->item,它是一个 int。如果要输出“A D E M O R S T”,则应为字符

template <class T>
class Node{
public:
    Node(int data = 0);
    bool red;
    T item;
    ....
};

类似的东西

【讨论】:

  • 感谢item 不是data 的问题。我如何将item 同时定义为char 类型和integer?因为该程序的主要目的是处理数字,而 ADSOMERT 只是一个介绍......
  • 如果您打算使用各种数据类型,可以尝试将其设为模板类。
  • 通过在课前添加template并将item重新定义为char?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 2012-05-08
  • 1970-01-01
  • 2019-12-30
  • 2019-11-10
  • 1970-01-01
相关资源
最近更新 更多