CString回文测试

时间:2019-10-31 21:00:31

标签: c++ c-strings

我的目标是通过命令行输入,然后我的代码获取输入,进行复制并在我的反向函数中对其进行反向。然后返回反转回文为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

2 个答案:

答案 0 :(得分:1)

仅使用==来比较原始版本和使用反向迭代器初始化的初始化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 palindrome\n";
        else
            std::cout << s << " is NOT a palindrome\n";
    }
}

这会破坏实际的逆转,并与一个简单的比较:

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

请参阅:std::basic_string::rbeginstd::basic_string::rend

使用/输出示例

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

答案 1 :(得分:0)

按索引检查索引不是更好吗?

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

ofc我从头开始,j从头开始。如果数字是奇数,应自行检查