在C++中将破折号删除的文件中的数字插入 BST

Inserting numbers from file deliminted by dash into BST in C++

本文关键字:文件 数字 插入 BST 删除 C++ 破折号      更新时间:2023-10-16

我正在尝试编写一个程序,该程序将从文件中读取数字并将它们插入到二叉搜索树中。 我尝试读取的文件很大(超过一百万个数字(,但第一个文件以这种方式开始:

298267282091408035-17044748745909945522138999443630343281-7437445665634475999134759620996365304-30967249084947458298112694712508035495502810273077177769044463844948009893353577 2884251867099313-5749770665631259681-3280801305990840625-9197941794449524441-147424278867187802328369201167366083797795701747773283129-4794953864841990716317462836568229334

-...

其中数字由破折号分隔(并且没有换行符,因此理论上可以全部使用一行(。

老实说,我对如何做到这一点感到非常困惑。 这是我到目前为止所拥有的,但我知道这是错误的。 我只是不确定如何解决它。

    cout << "File to be read: " << flush;
    string fileName;
    cin >> fileName;
    fstream in;
    in.open(fileName.c_str());
    assert(in.is_open());
    while(in.good()){
        int num = in.get();
        BST bst;
        while(isalnum(num)){
            try{
                bst.insert(num);
            } catch(Exception& e){
                cerr << "error" << flush;
            }
        }
    }

我还试图有一种方法来指示值是否重复并处理它引起的异常(因为重复值无法插入 BST(。

我知道我对这个问题没有提供太多帮助,但我只是不确定如何去做。 您能提供的任何帮助将不胜感激。 谢谢。

我认为您应该使用带有'-'getline作为分隔符。

喜欢这个:

string temp;
std::getline(cin, temp, '-'); 

顺便说一句:看起来int不足以达到给定的数字,其中一些真的很大。 即使对于long long int类型来说也太大了。

也许最好将它们保留为字符串。