回文测试

CString palindrome test

本文关键字:测试 回文      更新时间:2023-10-16

我的目标是通过命令行输入,然后我的代码获取输入,复制并在我的反向函数中反转它。然后返回反转的回文作为 rev。

我尝试在我的 strcmp(x,y == 0) 函数中调用我的反向函数,这给我带来了问题,我继续尝试初始化第二个 char 数组,然后将 reverse(palindrome) 复制到它上面然后进行比较。

我不知道从这里去哪里。任何帮助将不胜感激。

#include <iostream>
#include <cstring>

using namespace std;
string reverse(string palindrome) {
string rev;
for (int i = 0; i < palindrome.length(); i++)
rev += palindrome[palindrome.length() - 1 - i];
return rev;
}//string reverse closing


int main(int argc, char *argv[]) {
char palindrome[1000] = "";     //empty string
for (int i = 1; i < argc; i++) {
strcat_s(palindrome, 1000, argv[i]);
}

char rev[1000] = "";
strcpy(rev, reverse(palindrome));
if (strcmp(palindrome, rev == 0)){
cout << "The input was a valid palindrome";
}
else if (strcmp(palindrome, rev != 0)) {
cout << "This input was not a valid palindrome";
}
}// Main closing bracket

使用==来比较原始和用反向迭代器初始化的初始化std::string可能要容易得多,例如

#include <iostream>
#include <string>
int main (int argc, char **argv) {
for (int i = 1; i < argc; i++) {
std::string s(argv[i]);
if (s == std::string (s.rbegin(), s.rend()))
std::cout << s << " is a palindromen";
else
std::cout << s << " is NOT a palindromen";
}
}

这打破了实际的反转,并比较为一个简单的:

if (s == std::string (s.rbegin(), s.rend()))

参见:std::basic_string::rbegin 和 std::basic_string::rend

示例使用/输出

$ ./bin/palindromeargv "anna" "bananna" "amanaplanacanalpanama"
anna is a palindrome
bananna is NOT a palindrome
amanaplanacanalpanama is a palindrome

逐个索引检查索引不是更好吗?

while(true){
if(palindrome[i]!=palindrome[j];
return false;
}

OFC I 从开头开始,j 从长度开始。如果数字是奇数,它应该自己检查