Хороший способ создать палиндром в C ++ с учетом первой половины - PullRequest
0 голосов
/ 03 января 2019

Есть ли простой способ создать палиндром в C ++ с учетом первой половины? Например, учитывая «abcdef», я хочу вернуть «abcdeffedcba», оставив ввод первой половины без изменений?

Я знаю, что вы могли бы сделать, но есть ли лучший способ сделать это в одну строку? В Java reverse () возвращает значение, поэтому вы можете сделать это в одной строке.

string createPalindrome(string & half)
{
    string temp = half;
    reverse(temp.begin(), temp.end());
    return half + temp;
}

Ответы [ 3 ]

0 голосов
/ 03 января 2019

Если вы хотите сделать это в одной строке, вот реализация:

#include <string>
#include <iostream>

std::string createPalindrome(const std::string & half)
{
    return half + std::string(half.rbegin(), half.rend());
}

int main()
{
    std::cout << createPalindrome("abcdef");
}    

Live Example

Обратите внимание, что это в основном берет строку и объединяетэто с обратной стороны себя.

half.rbegin() и half.rend() являются обратными итераторами, поэтому временная обратная строка создается с использованием этих итераторов.

0 голосов
/ 03 января 2019

Вы можете добавить свои собственные удобные функции, которые лучше соответствуют вашим вкусам, для включаемых файлов.Чтобы заставить такой включаемый файл работать должным образом в любом месте вашего приложения

  • , он должен иметь уникальную защиту включения,
  • функции должны быть объявлены встроенными, а
  • функции должнынаходиться в своем собственном пространстве имен

примерно так (в файле включения, скажем, скажем, strhlp.h),

    // start of include guard 
    // must be first on this file
    // must be unique for this file
#ifndef STRING_HELP_ONCE
#define STRING_HELP_ONCE

#include <string>
#include <algorithm>

namespace mystr { // in own namespace

    inline std::string reverse(const std::string& s) { // function declared inline
        std::string t = s;
        std::reverse(t.begin(), t.end());
        return t;
    }

    // ... additional related functions
}

#endif // end of include guard (must be last on file)

Так выглядит ваша функция,

#include "strhlp.h"

string createPalindrome(string & half)
{
    return half + mystr::reverse(half);
}
0 голосов
/ 03 января 2019

Нет необходимости делать это в одной строке.Код, который вы написали, совершенно чистый и понятный.Если вы хотите использовать обратный метод, который я бы порекомендовал, поскольку он делает именно то, что вы хотите, вы все равно не можете сделать это в одной строке.

...