C string перевернуть строку

Я новичок в кодировании, и мой друг дал мне проект, чтобы изменить порядок строки, введенной пользователем, однако, когда я запускаю этот код, программа просто многократно печатает строку, введенную много раз, и я не уверен в чем дело.

Например, я ввожу "hi" он просто печатает "hi" много раз. Я пытался использовать cin , getline а также scanf (по рекомендации друга), но безрезультатно …

Решение

Поскольку вопрос помечен C++ , Вы должны использовать конструкции C ++, такие как std::string а также std::reverse . Это приведет к более читаемому и понятному коду.

Другие решения

Эта строка неверна:

Вы должны использовать оператор индекса [] следующим образом:

Обратите внимание, что endl отсутствует, так как это напечатало бы каждый символ в новой строке.

Использование arr [x] дает вам элемент массива (или символ строки, если хотите) по индексу Икс. Обратите внимание, что индексы элементов в C ++ начинаются с 0. Таким образом, первый элемент это arr [0], второй arr [1] и так далее.

Кроме того, зачем использовать массив символов в стиле C только размером 5? Вы можете использовать C ++ std :: string так же эффективно, и это будет работать для больших строк:

Надеюсь это поможет.

Когда ты пишешь, cout Вы печатаете всю строку в каждой итерации цикла. Вместо этого вы хотите напечатать символ в индексе x так что вы должны написать это как cout Если вы используете endl внутри цикла вы получите новую строку после каждого символа.

Более того, в C ++ есть более простой способ иметь дело со строками, используя библиотеку строк. Тогда вам не нужно заранее указывать количество символов в вашей строке, и это помогает, если пользователю нужно ввести более 4 символов.

Читайте также:  Setup has detected an incompatible build

Что происходит, вы отправляете все содержимое arr в cout 5 раз. Вместо этого вы хотите напечатать каждый символ в обратном порядке; Для этого нужно отправить только один символ arr в то время как внутри вашего for цикл:

Кроме того, вы должны иметь cout после for петля; в противном случае вы будете печатать символ новой строки после каждой буквы.

Альтернативное решение с использованием итераторов:

Я пытаюсь модифицировать строку, передавая ее по ссылке, обращая ее, например: слово дельфин, к тому, что она nihplod, используя только рекурсию. Я не могу добавить больше параметров для функции изменения заголовка. Мой вывод сейчас od вместо dolphin , я думаю, что он делает только последние две буквы, я, честно говоря, не знаю почему. Любая вещь, которую я должен изменить? Вот мой код.

3 ответа

Это напечатает в обратном порядке и не изменит исходную строку, которая была передана. Если вы хотите изменить исходную строку, просто удалите переменную temp .

  • Если длина строки меньше 2, просто верните
  • обрезать первый и последний символы слова для создания подстроки
  • рекурсивно вызовите reverse для вашей подстроки
  • После возвращения из рекурсии добавьте к исходному «последнему символу» префикс и добавьте к исходному «первому символу» окончание строки

[117 ] Вот, пожалуйста:

Не рекурсивный способ достижения того же самого может быть:

3 ответа 3

Все методы, которые вам предложили (включая и мой), не подходят для серьезного продакшн кода, поскольку, например, не учитывают расстановку Acute Accents , которые при реверсе окажутся перед неправильным знаком, а также будут реверсить суррогатные пары в UTF-16 , фактически, "ломая" корректную юникодную строку.

Подробнее насчет этих подводных камней — Jon Skeet, C# in Depth — 1.7.2.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *