الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الاستاك مرة أخرى

مغلق
بدأه omer_omran في 18 يونيو 2003 · 7 رد · 787 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

إخواني معلشي هو الاستاك مرة أخرى

أرد من هذا البرنامج أن ينقل محتويات ملف إلى ملف آخر عن طريق الاستاك ولكن أريد أن يقرأه كلمة كلمة وليس حرف حرف بحيث يقرأ

أنا اسمي عمر

عمر اسمي أنا

وهذه محاولتي مع البرنامج

#include<iostream.h>

#include<conio.h>

#include<fstream.h>



class Stack

{

private:



    char st[1000];

    int top;

public:

    Stack()

    { 

        top = 0;

    }

    void push(char var2[50])

    {

        st[top]= var2;

  

    }

    char pop()

    {

        return st[--top];

    }

    bool isEmpty()

    {

        return (top ==0);

    }

}; 



int main()

{

   



	Stack s1;

    char var1[50];

    

    

    int i=0;

	int i1 = 0;

    char ch;

	ifstream fin("f1.txt");

	for (int n = 0;n<EOF;n++){

	fin.get(var1,50,' ');

	s1.push(var1);

	}



	fin.close();

	ofstream fout("f2.txt");

    while(!s1.isEmpty())

    {

        fout<< s1.pop();

    }

    

	fout.close();

	cin.get();

    return 0;

}

البرنامج يطلع الخطأ عند دالة ال Push وأنا عارف إنها خطأ بس مش عارف البديل إيه .

#2
private:



    char st[1000];

الأستاذ عمر عران متهيألي ممكن تنحل المشكلة لو st أصبح مصفوفة من نوع string وليس char بس ما أدري كيف

#3

هذا الرد فيه بعض التصرف وخاصة في طريقة الملفات

#include <iostream.h>

#include <stdio.h>

#include <string>



using namespace std;



class Stack

{

private:



    char * st[10];

    int top;

public:

    Stack()

    { 

        top = 0;

    }

    void push(char * var2)

    {

  if (!isFull())

  {

 	 st[top] = new char;

 	 strcpy(st[top], var2);

 	 top++;

  }

    }

    char* pop()

    {

  if (!isEmpty())

  {

 	 return st[--top];

  }

  return NULL;

    }

    bool isEmpty()

    {

        return (top == 0);

    }

	bool isFull()

	{

  return (top == 10);

	}

}; 



int main()

{

   



	Stack s1;

    char var1[10];

    

	FILE * pf;



	pf = fopen("f1.txt","r");

	rewind(pf);

	while (!feof(pf))

	{

  fscanf(pf, "%s ", &var1);

  s1.push(var1);

	}



	fclose(pf);

	pf = fopen("f2.txt", "w");

    while( !s1.isEmpty() )

    {

  strcpy(var1, s1.pop());

  fprintf(pf, "%s ", &var1);

    }

    

	fclose(pf);

	cin.get();

    return 0;

}
#4

وهذا كود إسماعيل عنجريني بدون تصرف في الملفات

#include<iostream.h>

#include<conio.h>

#include<fstream.h>

#include<string.h>











class Stack

{

private:



    char * st[1000];



    int top;

public:

    Stack()

    { 

        top = 0;

    }

    void push(char * var2)

    {

        

	if (!isFull())

  {

 	 st[top] = new char;

 	 strcpy(st[top], var2);

 	 top++;

  }

    

	}



    char* pop()

    {

       if (!isEmpty())

  {

 	 return st[--top];

  }

  return NULL;

    

    }

    bool isEmpty()

    {

        return (top ==0);

    }

	bool isFull()

	{

  return (top == 1000);

	}







}; 



int main()

{

   

	Stack s1;

    

    char var1[1000];

    

    ifstream fin("f1.txt");





	while(fin.getline(var1,1000,' ')){



  s1.push(var1);



	}

  

  



	fin.close();

	ofstream fout("f2.txt");

  

    while(!s1.isEmpty())

    {

        

  strcpy(var1, s1.pop());

  fout<< var1<<' ';

  

  

    }

   

	fout.close();



    return 0;

}
#5

لا أدري كيف أشركم على هذا التجاوب السريع وقد جربت الكود ونفع بالفعل والحمد لله ولكن لدي سؤالين فيه :

1 - ما معنى هذا السطر

st[top] = new char;

ما فهمته أنه قد جعل كل عنصر من عناصر المصفوفة st مصفوفة حرفية

2 - لماذا لما لغيت المؤشرات لم يعمل البرنامج . ما أهميتها هنا .

ومرة أخرى شكرا جزيلا

#6

لا شكر على واجب

بالنسبة للسؤال الأول : يا ريت حد من الموجودين يجاوبك لأني مش هعرف أفيدك كويس فيه

void push(char * var2)

إزاي المعامل بتاع الدالة حرفي وهي هتأخذ مصفوفة حرفية

بالنسبة للسؤال الثاني : لأن الreturn بتاع new يكون عنوان فلازم تساويه بمؤشر .

#7

لاحظوا معي :

char * st معناه أني أعرف سلسلة نصية

char *st[N] تعني أني أعرف مصفوفة كل عنصر فيها هو سلسلة نصية

char st[N] تعني أني أعرف مصفوفة كل عنصر فيها هو محرف مؤلف من بايت واحد

وأي تساؤل أنا جاهز

#8

كدة انتا عشرة على عشرة ;)

هذا الموضوع مغلق.

مواضيع مشابهة