2. Write a C++ program that reads data from an input file called “Input.txt” and counts how many times the file contained words that are the same as their inverse. Such words are called e. The input file can be downloaded from the BB. The program should print the number of palindromes found in the text on the screen, and also saves a copy of each palindrome found in the input file in another file (output file) called “palindromes.txt”. is this true ? ;D Code: #include <iostream> #include <fstream> #include <string> #include <iomanip> using namespace std; ifstream fin; ofstream fout; bool PalindromeChecker(string inputString) { int i=0; int length = inputString.length(); char temp[255] = {'\0'}; for (i=0; i<length; i++) { if ((temp[i] >= 'a') && (temp[i] <= 'z')) temp[i] = char(int(temp[i]) - 32); } for (i=0; i<length; i++) { if ((temp[i] < 'A') || (temp[i] > 'Z')) { for (int j=i; j<length; j++) { temp[j] = temp[j+1]; } i--; length--; } } int checkLength = length - 1; if ((checkLength == 0) || (checkLength == 1)) return true; for (i=0; i<=checkLength/2; i++) { if (temp[i] != temp[checkLength-i]) return false; } return true; } void printAnswer(string input, bool isit) { if (isit == true) cout << input.data() << " is a palindrome." << endl; else cout << input.data() << " is not a palindrome." << endl; } int main() { string inputString; bool isPalindrome = true; fin.open("palindromes.txt"); fout.open("output.txt"); if (!fin.good()) throw "I/O Error!"; if (!fout.good()) throw "I/O Error!"; while (fin.good()) { getline(fin,inputString); isPalindrome = PalindromeChecker(inputString); printAnswer(inputString,isPalindrome); } fin.close(); fout.close(); return 0; }
Please use code blocks when you post code. You've been around long enough now to know about them. It makes code easier to read by preserving the formatting and using a fixed pitch font. Rather than me reading the code and trying to figure out if it's correct or not, why don't you plug it into your favourite compiler, write some test data and see what the program does with that data. If it picks out the right data and ignores the wrong, then it works. If it doesn't, then it doesn't. If you display the contents of temp just before returning from PalindromeChecker(), passing in some known words, does temp contain what you expect?
tried the code in Visual Studio 2008. Reduced the code to: Code: char *str="HellolleH"; printf("%s %s a palindrome\n",str,PalindromeChecker(str)?"IS":"IS NOT"); and it (wrongly) said IS NOT. Have a look at the code in the PalindromeChecker function and tell me what you think the first for() loop will do. Will that "if" ever evaluate true?