01/10/2018, 00:23

Tạo Stack từ file?

Em chào mọi ng!
Cho em hỏi cách đọc file rồi lưu vào Stack tạo bằng linked list với ạ.
Cho em hỏi 2 vấn đề ạ.

  1. Em đọc file thì hàm đọc có tham số là tên file kiểu string filename -> chương trình báo lỗi, còn nếu đặt làchar* filename thì lại được là sao ạ?

  2. Các bác sửa lỗi giúp e sao để nó hiện ra màn hình sau khi đọc từ file ạ.
    Em đội ơn các bác::)))

    #include
    #include
    #include

    using namespace std;

    struct node{
    int data;
    node* next;
    };

    struct stack{
    node* top;
    };

    //khoi tao
    void init(stack s){
    s.top = NULL;
    }

    //ktra rong
    bool isempty( stack s){
    if( s.top == NULL)
    return true;
    else
    return false;
    }

    //tao 1 node
    node* makenode( int x){
    node *p = new node;

     if( p == NULL)
     	exit(1);
     else{
     	p->data = x;
     	p->next = NULL; 
     }
     
     return p;
    

    }

    void push(stack s, int x){
    node *p = makenode(x);
    if( isempty(s))
    s.top = p;
    else
    {
    p->next = s.top;
    s.top = p;
    }
    }

    //ham nhap =>> tao stack
    stack newstack( char* filename ){
    stack s;
    int x;
    fstream f;
    f.open( filename ,ios::in );
    if( f == 0 ){
    cout<<“Khong timm thay file!”<<endl;
    exit(1);
    }
    else
    {
    while( ! f.eof() ){
    node *p;
    f>>p->data;
    p->next = s.top;
    s.top = p;
    }
    }

     	return s;
    

    }

    void printout(stack s){

     if( ! isempty (s))
     {
     	node *p = s.top;
     	while( p != NULL){
     		cout<<" "<<p->data;
     		p = p->next;
     	}
     }	
    

    }

    int main()
    {
    stack s;
    init(s);
    isempty(s);
    newstack(“lab3_b1.txt”);
    printout(s);

     return 0;
    

    }

Duy Quoc viết 02:27 ngày 01/10/2018

Bạn copy error log từ compiler lên để mọi người xem nhé.


Tuy chưa xem lỗi của bạn nhưng khi khởi tạo đối tượng string bạn đã include nó vào chương trình chưa?

 #include<cstring>

Chỉ chứa những hàm xử lý chuỗi. Vậy lớp string nằm ở đâu. Nó ở ngay bên dưới đây

#include<string>

void open (const char* filename,
           ios_base::openmode mode = ios_base::in | ios_base::out);
void open (const string& filename,
           ios_base::openmode mode = ios_base::in | ios_base::out);

Thêm nữa fstream định nghĩa 2 hàm open(), một nhận kiểu char*, một nhận kiểu string, việc sử dụng string mà không include thư viện có thể là nguyên nhân gây ra lỗi.

Bài liên quan
0