| | |
Help on stack , queue, palindrome program...
Please support our C++ advertiser: Intel Parallel Studio Home
![]() |
•
•
Join Date: Sep 2005
Posts: 16
Reputation:
Solved Threads: 0
Question:--
Write a program that read a line of text, changes each uppercase letter to lowercase and places each letter both in a queue and onto a stack.
The program should then verify whether the line of text is a palindrome
Output:
Please enter a line of text
I am A.I
i AM a.i
This is a palindrome
---------------------------------------------------------------------
How do i change the capital letter to smaller letter as above output example??? wat function i should add??
i using fstream function..now..wat should i do to change which i can enter text by my own??
thanks 4 helping..
My answers below:-
Write a program that read a line of text, changes each uppercase letter to lowercase and places each letter both in a queue and onto a stack.
The program should then verify whether the line of text is a palindrome
Output:
Please enter a line of text
I am A.I
i AM a.i
This is a palindrome
---------------------------------------------------------------------
How do i change the capital letter to smaller letter as above output example??? wat function i should add??
i using fstream function..now..wat should i do to change which i can enter text by my own??
thanks 4 helping..
My answers below:-
C++ Syntax (Toggle Plain Text)
#include<iostream> #include <cstdlib> // For EXIT_FAILURE and EXIT_SUCCESS #include <fstream> #include<string> using namespace std; const int MAX=50; // initialize max string size of 50 characters typedef char StackElement; // define StackElement typedef char QueueElement; // define QueueElement class Stack { public: Stack(){top=-1;arr[MAX]=0;} // default stack constructor void push(StackElement & ch); // push function StackElement topNpop(); // top and pop functions combined bool empty() const; // empty function private: StackElement arr[MAX]; // define char array int top; // define int top }; /******************************************* FUNCTION: push() DESCRIPTION: Pushes an element onto the stack PRECONDITION: Waiting for function call POSTCONTION: New element character on top of stack *******************************************/ inline void Stack::push(StackElement & ch) { if(top<MAX) { top++; // increment top arr[top]=ch; // push onto stack } else { cout<<"Stack is full.\n"; // display stack is full } } /******************************************* FUNCTION: topNpop() DESCRIPTION: Reads and pops top element off the stack PRECONDIION: Waiting for function call POSTCONDITION: One element read and removed fromt he stack RETURN: Top element from stack ********************************************/ inline StackElement Stack::topNpop() { if(top>-1) { return(arr[top]); // returns top element top--; // remove froms stack } else { cout<<"Stack is empty.\n"; // display stack is empty return(0); } } /******************************************* FUNCTION: empty() DESCRIPTION: returns result value if stack is empty PRECONDITION: result=false POSTCONDITION: result may be true or remain false RETURN: result if true or false ********************************************/ inline bool Stack::empty() const { bool result=false; // initialize bool as false if (top==-1) { result=true; // if top is -1 return result true return(result); } else { return(result); // else return false } } class Queue // Queue class { public: Queue(){front=0, back=0;arr[MAX]=0;} // Queue default constructor void addq(QueueElement & ch); // define addq QueueElement frontNremoveq(); // define frontNremove private: QueueElement arr[MAX]; // initialize QueueElement array int front, back; // initialize int front and back }; /******************************************* FUNCTION: addq() DESCRIPTION: adds an element onto the queue PRECONDITION: Waiting for element to add POSTCONDITION: New element now on the queue ********************************************/ inline void Queue::addq(QueueElement &ch) { if(front!=(back+1)%MAX) { arr[back]=ch; // add element to back of queue back=(back+1)%MAX; } else { cerr<<"Error Queue is full\n"; // display queue is full } } /******************************************* FUNCTION: frontNremoveq() DESCRIPTION: reads and removes front element from queue PRECONDITION: front pointing to front of queue POSTCONDITION: front element is returned and then incremented ********************************************/ inline QueueElement Queue::frontNremoveq() { if(front!=back) { return(arr[front]); // return front element front++; // remove front element } else { cout<<"Queue is empty.\n"; // display queue is empty return(0); } } /***************************MAIN******************************/ int main() { Stack S; // initialize stack Queue Q; // initialize queue string s; int i=0; // initialze int 'i' char string[MAX]; // initialize char string bool RESULT=false; // initilize bool RESULT to false ifstream inside ("palindromeinput.txt"); if (! inside.is_open()) { cout << "Error opening file"; exit (1); } while (! inside.eof() ) { inside.getline (string,100); cout << string << endl; } while(string[i]!=NULL) { S.push(string[i]); // push chars individually from string to Q.addq(string[i]); // stack and queue i++; // next char } while(i>0) { if(S.topNpop()==Q.frontNremoveq()) // compare each element from { // stack and queue RESULT=true; // if same for all chars return true } else { RESULT=false; // if not same for any char break and return false break; } i--; } if(RESULT==true) { cout<<string<<" is a palindrome\n"; // display if true } else { cout<<string<<" is not a palindrome\n"; // display if false } ofstream outside ("palindromeoutput.txt"); if (outside.is_open()) { outside << string; outside<< string; outside.close(); } return 0; }
•
•
•
•
How do i change the capital letter to smaller letter as above output example
C++ Syntax (Toggle Plain Text)
#include <string> #include <algorithm> #include <iostream> #include <iomanip> #include <cctype> using namespace std; int main() { string str = "UPPER-CASE"; transform(str.begin(),str.end(),str.begin(),tolower); cout << str << endl; return 0; }
I'm not terribly STL-savvy, what is this error telling me?
...while I continue searching for an answer on my own...
[edit]Found this: [Dani - Here I really miss the fixed fonts! Follow the dinkumware link and note my previous replies as to why. Oh, and font sizes would have been beneficial as well.]
[edit=2]Ahh.
C++ Syntax (Toggle Plain Text)
//Error E2285 testpp.cpp 11: Could not find a match for 'transform<InputIterator1,InputIterator2,OutputIterator,BinaryOperation>(char *,char *,char *,charT (*)(charT,const locale &))' in function main()
[edit]Found this:
•
•
•
•
transform
The first template function evaluates *(dest + N) = func(*(first + N)) once for each N in the range [0, last - first). It then returns dest + (last - first). The call func(*(first + N)) must not alter *(first + N).template<class InIt, class OutIt, class Fn1> OutIt transform(InIt first, InIt last, OutIt dest, Fn1 func); template<class InIt1, class InIt2, class OutIt, class Fn2> OutIt transform(InIt1 first1, InIt1 last1, InIt2 first2, OutIt dest, Fn2 func);
The second template function evaluates *(dest + N) = func(*(first1 + N), *(first2 + N)) once for each N in the range [0, last1 - first1). It then returns dest + (last1 - first1). The call func(*(first1 + N), *(first2 + N)) must not alter either *(first1 + N) or *(first2 + N).
[edit=2]Ahh.
"One of the methods used by statists to destroy capitalism consists in establishing controls that tie a given industry hand and foot, making it unable to solve its problems, then declaring that freedom has failed and stronger controls are necessary." --Ayn Rand
•
•
•
•
Originally Posted by Dave Sinkula
I'm not terribly STL-savvy, what is this error telling me?
...while I continue searching for an answer on my own...C++ Syntax (Toggle Plain Text)
//Error E2285 testpp.cpp 11: Could not find a match for 'transform<InputIterator1,InputIterator2,OutputIterator,BinaryOperation>(char *,char *,char *,charT (*)(charT,const locale &))' in function main()
Borland must have the same bug then.
"One of the methods used by statists to destroy capitalism consists in establishing controls that tie a given industry hand and foot, making it unable to solve its problems, then declaring that freedom has failed and stronger controls are necessary." --Ayn Rand
•
•
Join Date: Sep 2005
Posts: 16
Reputation:
Solved Threads: 0
•
•
•
•
Originally Posted by Ancient Dragon
use tolower() to convert a character to lower-case. It only works on one character, so if you want to convert a whole string to lower case you have to create a loop to iterate each character. Here is a c++ example.
C++ Syntax (Toggle Plain Text)
#include <string> #include <algorithm> #include <iostream> #include <iomanip> #include <cctype> using namespace std; int main() { string str = "UPPER-CASE"; transform(str.begin(),str.end(),str.begin(),tolower); cout << str << endl; return 0; }
this what i have done...
still hv some problems...
1.my output:-
Please enter a line of text:
i am not a.i
i am not a.i
This is a palindrome <-----it must be this is not a palindrome(uncorrect answers)
Press any key to continue
2. how to use the touppercase() n tolowercase()combine as below???
I am A.I
i AM a.i
C++ Syntax (Toggle Plain Text)
#include<iostream> #include <cstdlib> // For EXIT_FAILURE and EXIT_SUCCESS #include <fstream> #include<string> #include <algorithm> #include <iomanip> #include <cctype> using namespace std; const int MAX=50; // initialize max string size of 50 characters typedef char StackElement; // define StackElement typedef char QueueElement; // define QueueElement class Stack { public: Stack(){top=-1;arr[MAX]=0;} // default stack constructor void push(StackElement & ch); // push function StackElement topNpop(); // top and pop functions combined bool empty() const; // empty function private: StackElement arr[MAX]; // define char array int top; // define int top }; /******************************************* FUNCTION: push() DESCRIPTION: Pushes an element onto the stack PRECONDITION: Waiting for function call POSTCONTION: New element character on top of stack *******************************************/ inline void Stack::push(StackElement & ch) { if(top<MAX) { top++; // increment top arr[top]=ch; // push onto stack } else { cout<<"Stack is full.\n"; // display stack is full } } /******************************************* FUNCTION: topNpop() DESCRIPTION: Reads and pops top element off the stack PRECONDIION: Waiting for function call POSTCONDITION: One element read and removed fromt he stack RETURN: Top element from stack ********************************************/ inline StackElement Stack::topNpop() { if(top>-1) { return(arr[top]); // returns top element top--; // remove froms stack } else { cout<<"Stack is empty.\n"; // display stack is empty return(0); } } /******************************************* FUNCTION: empty() DESCRIPTION: returns result value if stack is empty PRECONDITION: result=false POSTCONDITION: result may be true or remain false RETURN: result if true or false ********************************************/ inline bool Stack::empty() const { bool result=false; // initialize bool as false if (top==-1) { result=true; // if top is -1 return result true return(result); } else { return(result); // else return false } } class Queue // Queue class { public: Queue(){front=0, back=0;arr[MAX]=0;} // Queue default constructor void addq(QueueElement & ch); // define addq QueueElement frontNremoveq(); // define frontNremove private: QueueElement arr[MAX]; // initialize QueueElement array int front, back; // initialize int front and back }; /******************************************* FUNCTION: addq() DESCRIPTION: adds an element onto the queue PRECONDITION: Waiting for element to add POSTCONDITION: New element now on the queue ********************************************/ inline void Queue::addq(QueueElement &ch) { if(front!=(back+1)%MAX) { arr[back]=ch; // add element to back of queue back=(back+1)%MAX; } else { cerr<<"Error Queue is full\n"; // display queue is full } } /******************************************* FUNCTION: frontNremoveq() DESCRIPTION: reads and removes front element from queue PRECONDITION: front pointing to front of queue POSTCONDITION: front element is returned and then incremented ********************************************/ inline QueueElement Queue::frontNremoveq() { if(front!=back) { return(arr[front]); // return front element front++; // remove front element } else { cout<<"Queue is empty.\n"; // display queue is empty return(0); } } /***************************MAIN******************************/ int main() { Stack S; // initialize stack Queue Q; // initialize queue string s ; int i=0; // initialze int 'i' char string[MAX]; // initialize char string bool RESULT=false; // initilize bool RESULT to false strcpy(string," "); //transform(s.begin(),s.end(),s.begin(),toupper); cout << "Please enter a line of text: " << endl; cin.getline (string,100); while(string[i]!=NULL) { S.push(string[i]); // push chars individually from string to Q.addq(string[i]); // stack and queue i++; // next char } while(i>0) { if(S.topNpop()==Q.frontNremoveq()) // compare each element from { // stack and queue RESULT=true; // if same for all chars return true } else { RESULT=false; // if not same for any char break and return false break; } i--; } if(RESULT==true) { cout<<string<<" \nThis is a palindrome\n"; // display if true } else { cout<<string<<" \nThis is not a palindrome\n"; // display if false } cout<<s<<s<<endl; return 0; }
1. start out by replacing that C-style character array named "string" with a c++ string class and name it something else, such as line. You are writing a c++ program, so use c++ classes whenever possible. Not that it can't be done with C, just that it's more consistent.
2. replace cin.getline() with getline(cin,line)
3. paste that transform line after the getline() in #2 above
After making the above changes your program seems to work ok for the strings I entered.
2. replace cin.getline() with getline(cin,line)
3. paste that transform line after the getline() in #2 above
After making the above changes your program seems to work ok for the strings I entered.
•
•
Join Date: Sep 2005
Posts: 16
Reputation:
Solved Threads: 0
•
•
•
•
Originally Posted by Ancient Dragon
1. start out by replacing that C-style character array named "string" with a c++ string class and name it something else, such as line. You are writing a c++ program, so use c++ classes whenever possible. Not that it can't be done with C, just that it's more consistent.
2. replace cin.getline() with getline(cin,line)
3. paste that transform line after the getline() in #2 above
After making the above changes your program seems to work ok for the strings I entered.
mind show me where should i add the transform function??
![]() |
Other Threads in the C++ Forum
- Previous Thread: Input with command line
- Next Thread: quick question- sprintf
| Thread Tools | Search this Thread |
api array based beginner binary bitmap c++ c/c++ calculator char char* class code coding compile compiler console conversion count database delete deploy desktop developer directshow dll download dynamic dynamiccharacterarray email encryption error file forms fstream function functions game givemetehcodez google graph gui homeworkhelp homeworkhelper iamthwee ifstream input int java lib linkedlist linker list loop looping loops map math memory multiple news node number numbertoword output parameter pointer problem program programming project proxy python random read recursion recursive reference rpg sorting string strings temperature template test text text-file tree unix url variable vector video visualstudio win32 windows winsock word wordfrequency wxwidgets






