gpt4 book ai didi

c++ - 使用堆栈和队列 C++ 的回文检测器

转载 作者:行者123 更新时间:2023-11-28 02:50:04 25 4
gpt4 key购买 nike

我正在研究 C++ 中的回文检测器,它读取文件并用指示符“*”标记回文行。这是我的。

PalindromeDetector::PalindromeDetector(const string& iFile, const string& oFile) {
myInFile = iFile;
myOutFile = oFile;
}

void PalindromeDetector::detectPalindrome() {
ifstream fin(myInFile.data());
ofstream fout(myOutFile.data());
string nLine, palLine;
while (getline(fin, nLine)){
if (isPalindrome(nLine)){
fout << nLine << " ***";
} else {
fout << nLine;
}
}
fin.close();
fout.close();
}

bool PalindromeDetector::isPalindrome(const string& str) {
Stack<char> charStack(1);
ArrayQueue<char> charQueue(1);
char ch1, ch2;
for ( unsigned i = 0; i < str.size(); i++){
if (isalnum (str[i])){
tolower(str[i]);
try {
charStack.push(str[i]);
charQueue.append(str[i]);
} catch ( StackException& se ){
charStack.setCapacity(charStack.getCapacity() * 2);
charQueue.setCapacity(charQueue.getCapacity() * 2);
charStack.push(str[i]);
charQueue.append(str[i]);
}
} else {
while ( !charStack.isEmpty() || !charQueue.isEmpty() ){
ch1 = charStack.pop();
ch2 = charQueue.remove();
if ( ch1 != ch2 ){
return false;
}
}
}
}
return true;
}

到目前为止,我遇到了 2 个问题:1. 没有正确输出行尾带有“*”的文件;由于某种原因,它在前面做。2. 它只标记文件每个 block 中的第一行,而不是回文行。我真的很感激这方面的帮助。

最佳答案

你为什么要把 isPalidrome 搞得这么复杂?

可以这样做

bool isPalidrome(const string &s) {
int left = 0;
int right = s.length() - 1;
while (left < right) {
if (s[left] != s[right]) return false;
left++; right--;
}
return true;
}

当然你可能会添加什么不区分大小写

编辑

使用更傻的栈和队列的方式

bool isPalidrome(const string &s) {
// Put everything on both
std::stack<char> lifo;
std::queue<char> fifo;
unsigned int loop;
for (loop = 0; loop < s.length); ++loop) {
lifo.push(s[loop]);
fifo.push(s[loop]);
}
// Note stack and queue the characters are in reverse order from each other
for (loop = 0; loop < s.length); ++loop) {
if (lifo.pop() != fifo.pop()) return false;
}
return true;
}

关于c++ - 使用堆栈和队列 C++ 的回文检测器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23281696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com