All pastes #9457 Raw Edit

Unnamed

public text v1 · immutable
#9457 ·published 2005-04-13 02:40 UTC
rendered paste body
#include <iostream>
#include <string>
#include <cctype>

using namespace std;

void swap(char&	var1, char& var2);
//switches values of var1 and var2
string reverse(string& palin);
//returns string s in reverse order
string remove_punct(string& palin, string& punct);
//returns string s with punctuation removed
string make_lower(string& palin);
//returns copy of string s with all of the characters lowercase
bool is_pal(string& palin);
//returns true of s is a palindrome, otherwise returns false
void writepalins();
ofstream output("palindromes.txt");

int main()
{
	char runagain;
	do{
			string str;
			cout << "Enter a candidate for palindrome testing: ";
			getline(cin, str);
			if(is_pal(str))
			{
				cout << "\"" << str << "\" is a palindrome.";
				writepalins(string str);
			}  
			else
				cout << "\"" << str << "\" is not a palindrome.";
			cout << endl;
			cout << "Run the program again? (y/n): ";
			cin >> runagain;
			cin.ignore();
			cout << endl;
		} while((runagain == 'y') || (runagain == 'Y'));
		return 0;
}//end main

void swap(char& var1, char& var2)
{
	char temp = var1;
	var1 = var2;
	var2 = temp;
}//end swap

string reverse(string& palin)
{
	int start = 0;
	int end = palin.length();
	string temp(palin);
	
	while(start < end)
	{
		end--;
		swap(temp[start], temp[end]);
		start++;
	}
	
	return temp;
}//end reverse

//uses <cctype> and <string>
string make_lower(string& palin)
{
	string temp(palin);
	for (int i = 0; i < palin.length(); i++)
		temp[i] = tolower(palin[i]);
	
	return temp;
}//end make_lower

string remove_punct(string& palin, string& punct)
{
	string no_punct; //initialized to empty string
	int s_length = palin.length();
	int punct_length = punct.length();

	for (int i = 0; i < s_length; i++)
	{
		string a_char = palin.substr(i,1); 
		int location = punct.find(a_char, 0);
		//find location of successive characters of src in punct_length
		
	if ((location < 0) || (location >= punct_length))
		no_punct = no_punct + a_char; 
	}
	return no_punct;
}

//uses functions make_lower, remove_punct
bool is_pal(string& palin)
{
	string punct(",;:.?!'\" ");
	string str(palin);
	str = make_lower(str);
	string lower_str = remove_punct(str, punct);

	return (lower_str == reverse(lower_str));
}

void writepalins()
{