c++ 为什么文件中的字符串变量被打印出来了?

yfwxisqw  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(108)

当我从文件中执行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。

g52tjvyc

g52tjvyc1#

使用break;代替i = 100;来结束循环,或者直接使用return false;
更重要的是,循环超出了phrase的范围,并且执行了太多的检查(您只需要迭代phrase的一半)。
试试这个:

bool CheckIfPalindrome(const string &phrase) {

    size_t size = phrase.size();
    size_t halfway = size / 2;

    for (size_t i = 0; i < halfway; ++i) {
        if (phrase[i] != phrase[(size - i) - 1]){
            return false;
        }
    }
    
    return true;
}

相关问题