All pastes #8912 Raw Edit

Mine!

public text v1 · immutable
#8912 ·published 2005-04-06 08:28 UTC
rendered paste body
#include <iostream>
#include <string>
#include <cctype>

using namespace std;

void swap(char&	v1, char& v2);
//switches values of v1 and v2
string reverse(const string& s);
//returns string s in reverse order
string remove_punct(const string& s, const string& punct);
//returns string s with punctuation removed
string make_lower(const string& s);
//returns copy of string s with all of the characters lowercase
bool is_pal(const string& s);
//returns true of s is a palindrome, otherwise returns false

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.";
		else
			cout << "\"" << str + "\" is not a palindrome.";
		cout << endl;
		cout << "Run the program again? (y/n): ";
		cin >> runagain;
		cout << endl;
		} while((runagain == 'y') || (runagain == 'Y'));
		return 0;
}//end main

void swap(char& v1, char& v2)
{
	char temp = v1;
	v1 = v2;
	v2 = temp;
}//end swap

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

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

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

	for (int i = 0; i < s_length; i++)
	{
		string a_char = s.substr(i,1); // a 1 char string
		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; //a_char not in punct, so keep it
	}
	return no_punct;
}

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

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