当我从文件中执行getline
命令,然后打印那一行时,如果我试图在变量所在的行上打印一些东西,它就会被打印掉,输出的最后一行是唯一正确的。
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
bool CheckIfPalindrome(string phrase);
int main() {
ifstream inputFile;
inputFile.open("p.txt");
string line;
bool isPalindrome;
while(getline(inputFile, line)){
isPalindrome = CheckIfPalindrome(line);
if (isPalindrome == true) {
cout << line << " is a palindrome" << endl;
} else {
cout << line << " is not a palindrome" << endl;
}
}
inputFile.close();
return 0;
}
//Checks if the phrase is a palindrome
bool CheckIfPalindrome(string phrase) {
bool isPalindrome = true;
for (size_t i = 0 ; i <= phrase.length() ; i++) {
if (phrase[i] != phrase[(phrase.length() - i) -1]){
isPalindrome = false;
i = 100;
}
}
return isPalindrome;
}
输出为:
is not a palindrome
is not a palindrome
is not a palindrome
is not a palindrome Elba.
is not a palindromeal: Panama!
is not a palindrome
is not a palindrome
racecar is a palindrome
所以很明显它正确地保存了字符串,但是只是打印了变量。如果这改变了什么,编译器就会被bash。
1条答案
按热度按时间g52tjvyc1#
使用
break;
代替i = 100;
来结束循环,或者直接使用return false;
。更重要的是,循环超出了
phrase
的范围,并且执行了太多的检查(您只需要迭代phrase
的一半)。试试这个: