Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

Развернуть слово

#строки #char


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

Например:
a1bcd => d1cba
    


Ответы

Ответ 1



Заводим указатели на начало и конец строки, идем в цикле, первый указатель увеличиваем, второй уменьшаем, цифры проскакиваем. Меняем между собой буквы на которые смотрят указатели. Завершаемся, когда указатели сравнялись. В виде кода как то так (правда вы язык не указали): int j = 0; int k = ch.length-1; while(j

Ответ 2



var s = "a1bcd"; var rev = s.match(/[a-z]/gi).reverse(), i = 0; var res = s.replace(/[a-z]/gi, m => rev[i++]); console.log(res);

Ответ 3



На C#: public string ReverseSkippingNonLetters(String source) { var result = new StringBuilder(); for (int i = 0; i < source.Length; i++) { Char forward = source[i], backward = source[source.Length - i - 1]; if(!Char.IsLetter(forward)) result.Append(forward); if(Char.IsLetter(backward)) result.Append(backward); } return result.ToString(); }

Ответ 4



Ну, вот развертка слова наоборот вручную без использования доп.методов с сортировкой, вдруг понадобится private char[] SortArray(char[] arr) { char max = arr[0]; for (int i = 0; i < arr.Length; i++ { max = arr[i]; for (int j = i; j < arr.Length; j++) { if (max < arr[j]) { max = arr[j]; arr[j] = arr[i]; arr[i] = max; } else if (max>='0'&&max<='9') { arr[i] = max; break; } } } return arr; }

Ответ 5



Решение на C++11 с использованием STL: #include #include #include std::string specReverse(const std::string& str) { std::string result(str); for (auto begin = result.begin(), end = result.end() - 1; begin < end; ) { if (!isalpha(*begin)) ++begin; else if (!isalpha(*end)) --end; else std::swap(*begin++, *end--); } return result; } int main() { const std::string input = "a1bcd"; std::cout << "Input=\"" << input << "\", output=\"" << specReverse(input) << "\"." << std::endl; }

Комментариев нет:

Отправить комментарий