# Setting String equal to char array?

Show 80 post(s) from this thread on one page
Page 2 of 2 First 12
• 07-24-2007
anon
May I recommend structuring the linked list code into functions.

Anyway, there's no reason to make the list doubly linked. Your assignment says that you need a stack and a queue implemented as linked lists. All you need is a linked list where you can push a new value onto either end, and the ability to read and pop one end.
• 07-24-2007
Stunner
I got the equations to get inserted into the linked list. Now I will work on making the code easier to read. I was initially thinking of making the doubly linked list because input members in the stack would be inserted in reverse order. But I ended up making another stack(making stacks were a little more simple than making a queue although a bit more inefficient) which copied in the data from the first stack. Now when I print what I enter, it is in the correct order. Here is my current working code, I will modify it in due time.

Here is the code:

Code:

```#include <iostream> using namespace std; struct node { float num; char opr; char type; node* next; node* prev; }; void printList(const node*); //entry* insert(int n, node* h); //entry* deleteNode(int n, node* h); //entry* PQInit(entry* h, entry* PQh); float arrayToFloat(char part[]); int main() { node *temp = 0, *head = 0;//starts out empty node *PQt = 0, *PQh = 0, *PQp = 0;//Polish queue float fltval; int j, n = 0, flag, count = 0; char string[80];         cout << "Enter an algebraic equation in reverse polish notation: \n";         cin.getline(string, 80);         cout << "Output from func arrayToInt:\n";         while(string[n] != '\0')         {         char part[15] = {'O'};                 for(j = 0, flag = 0; (string[n] != ' ') && (string[n] != '\0'); j++, n++)                 {                         part[j] = string[n];                         if(!isdigit(part[j]))//if character                         {                                 flag = 1;                         }//if                 }//for                 n++;                 if(flag == 0)//if part consists of int                 {                         if(string[n] != '\0')                         {                                 fltval = arrayToFloat(part);//converting array based number to float                                 cout << fltval << endl;                                 head = new node;                                 head->num = fltval;                                 head->type = 'N';                                 head->next = temp;                                 temp = head;                         }//if                 }//if                 else                 {                         if(string[n] != '\0')                         {                                 head = new node;                                 head->opr = part[0];                                 head->type = 'O';                                 head->next = temp;                                 temp = head;                         }//if                 }//else         }//while         //PQh = PQInit(head, PQh);         cout << "Output from linked list:\n";         printList(head);         //creating PQ stack from initial array         while(head != 0)         {                 PQh = new node;                 if(head->type == 'N')                 {                         PQh->num = head->num;                         PQh->type = 'N';                         PQh->next = PQt;                         PQt = PQh;                 }//if                 else                 {                         PQh->opr = head->opr;                         PQh->type = 'O';                         PQh->next = PQt;                         PQt = PQh;                 }//else                 head = head->next;         }//while         cout << "Output from PQ: \n";         printList(PQh);         return 0; }//main /***************************************/ //Prints list of Nodes void printList(const node* pointer) {         while(pointer != 0)         {                 if(pointer->type == 'N')                         cout << pointer->num << " ";                 else                         cout << pointer->opr << " ";                 pointer = pointer->next;         }//while         cout << endl; }//printList /****************************************/ //Converts an array of ints to a float value float arrayToFloat(char part[]) { int L = 0, i, j; float val = 0, value[15] = {0}; float valtab[5] = {1, 10, 100, 1000, 10000}; //                1  2  3    4    5         for(i = 0; part[i]; i++)         {                 value[i] = part[i] - '0';//converting to int from char                }//for                 L = strlen(part);         for(i = 0, j = L - 1; i < L; i++, j--)         {                 val = val + (value[i] * valtab[j]);         }//for         return val; }//arrayToFloat```
When I originally started working on making the second stack, I was working on it in a separate function, but I got a ton of errors and just decided to get it working first in main. Just be ware this is very dated function, I am better off copying what I have in main into the function rather than this. I am posting this so you guys can see if I did anything wrong and so you can correct me before I update this function. Any tips to help me with this will be appreciated. Here is the (commented out) function code:

Code:

```/******************************************/ //Initializes PQ /* entry* PQInit(entry* h, entry* PQh) { node* head = h;         while(h->next != 0)         {                 if(h->type == 'N')                         PQh->num = head->num;                 else                         PQh->opr = head->opr;                 head = head->next;                 PQh = PQh->next;                         }//while         return h;         }//PQInit */```