#строки #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; }
Комментариев нет:
Отправить комментарий