CString тест на палиндром - PullRequest
0 голосов
/ 01 ноября 2019

Моя цель - ввод через командную строку. Мой код берет ввод, делает копию и переворачивает ее в моей функции реверса. Затем возвращает перевернутый палиндром как rev.

Я попытался вызвать свою обратную функцию внутри моих функций strcmp (x, y == 0), и это вызывало у меня проблемы, я перешел к попытке инициализациивторой массив символов, а затем скопируйте на него реверс (палиндром) и затем сравните.

Я не уверен, куда идти дальше. Любая помощь будет оценена.

   #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 ]

1 голос
/ 01 ноября 2019

Гораздо проще просто использовать == для сравнения между оригиналом и инициализированным 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 :: rbegin и std :: basic_string :: rend

Пример использования / Вывод

$ ./bin/palindromeargv "anna" "bananna" "amanaplanacanalpanama"
anna is a palindrome
bananna is NOT a palindrome
amanaplanacanalpanama is a palindrome
0 голосов
/ 01 ноября 2019

Не лучше проверить индекс по индексу?

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

ofc Я начинаю с начала, а j с длины. Если число нечетное, оно должно проверить это с собой

...