Перейти к содержимому

Как развернуть строку в c

  • автор:

Обратная строка в C++

Во многих ситуациях нам может понадобиться перевернуть строку в программировании на C++. Это может включать в себя просто печать перевернутой строки. Или, может быть, в некоторых случаях нужно перевернуть строку навсегда по ее адресу.

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

Обращение строки в C++

Обращение строки относится к операции над строкой, при которой последовательность символов в ней инвертируется. Например, предположим, что «str» содержит строку «JournalDev».

После того, как операция реверсирования выполняется для строки «str», содержимое должно быть реверсировано. Следовательно, теперь «str» должна содержать строку «veDlanruoJ».

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

Использование функции reverse() в C++

Встроенная функция реверса reverse() в C++ напрямую переворачивает строку. Учитывая, что в качестве аргументов передаются как двунаправленные начальные, так и конечные итераторы.

Эта функция определена в заголовочном файле алгоритма. Приведенный ниже код описывает использование функции reverse() ,

#include #include #include using namespace std; int main()

Использование strrev()

strrev() — это предопределенная функция в C++, определенная внутри заголовочного файла cstring.h. Он широко применим для обращения любой C-строки (массива символов).

Кроме того, он требует только базовый адрес строки в качестве аргумента и соответствующим образом переворачивает строку. Давайте посмотрим, как мы можем использовать функцию strrev() в C++ для обращения строк.

#include #include using namespace std; int main()

Приведенный выше код очень хорошо иллюстрирует работу функции strrev() . Для строки «str» функция успешно обращает ее, как мы видим в самом выводе.

Печать строки в обратном порядке

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

#include #include using namespace std; int main() < string str="Journal Dev reverse example"; int i; cout= 0; i--) < coutreturn 0; > 
  • В приведенном выше коде мы сначала инициализировали строку «str».
  • Внутри цикла for при выводе строки обратите внимание, что мы инициализировали итератор i значением str.length()-1 . Это означает, что мы печатаем строку символ за символом, но начиная с последнего индекса.
  • Примечание. length() возвращает длину строки. Таким образом, для печати строки в обратном порядке мы должны учитывать последний индекс, который должен быть length()-1 , поскольку индексация начинается с «0» в массиве символов.

Создание собственной функции реверсирования строки My_rev()

До сих пор мы узнали, как мы можем печатать строку в обратном порядке, а также переворачивать строку с помощью различных предопределенных функций. Теперь давайте создадим или определим нашу собственную функцию с именем My_rev() , чтобы перевернуть заданную строку.

#include #include #include using namespace std; char *My_rev(char *str) < int i,len=0,n; char temp; len=strlen(str); n=len-1; for(i = 0; i <=(len/2); i++) < temp=str[i]; str[i]=str[n]; str[n]=temp; n--; >return str; > int main()
  • В приведенном выше коде My_rev() — это функция, которая переворачивает строку, если в качестве аргумента передается базовый адрес строки.
  • Внутри функции My_rev() *str — это указатель, в котором хранится базовый адрес предоставленной строки. В нашем случае str указывает на первый элемент строки My_string.
  • len хранит длину строки. Принимая во внимание, что n – это индекс последнего элемента.
  • В этой функции мы пытаемся поменять местами отдельные символы строки с обоих концов. Это означает, что мы продолжаем менять местами элементы с 0-го и n-го индекса, пока не доберемся до (len/2)-й позиции. В приведенном выше коде цикл for выполняет эту замену за нас, что технически переворачивает строку.
  • В конце мы возвращаем базовый адрес str функции main() . Где строка печатается с помощью функции cout .

Рекомендации

  • https://stackoverflow.com/questions/198199/how-do-you-reverse-a-string-in-place-in-c-or-c
  • /community/tutorials/string-length-in-c-plus-plus

Как в C можно перевернуть слова?

Пример: слово Hello будет написана olleH. Пытаюсь одним array бежать с начала, а другим — с конца и вставлять буквы. Мой код:

#include #include #include void mahaph(char str[]) < int total = strlen(str); char temp[10]; for (int i = total, int j = 0; i total; i--, j++) < temp[j] = str[i]; >printf("%s\n", temp[i]); > void main()

Отслеживать
13.7k 12 12 золотых знаков 43 43 серебряных знака 75 75 бронзовых знаков
задан 28 фев 2015 в 11:32
David Kern David Kern
99 3 3 серебряных знака 12 12 бронзовых знаков

@David Kern, Согласно правилам форума, вопросы не должны сводиться к решению либо завершению учебных заданий за учащихся. Пожалуйста, уточните, что вы сделали сами и что не получилось.

28 фев 2015 в 12:13

@David Kern, надеюсь это будет просто и понятно. char * copy_reverse (char src[], char dst[]) < int len = strlen(src), i = len - 1, j = 0; while (i >= 0) dst[j++] = src[i—]; dst[j] = 0; return dst; > int main (int ac, char *av[]) < if (av[1]) < char buf[strlen(av[1]) + 1]; puts(copy_reverse(av[1], buf)); >return puts(«End») == EOF; > Если вопросы остались — задавайте.

3 мар 2015 в 18:36

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

#include // putchar void rev(const char* const c) < if (*c) < rev(c + 1); putchar(*c); >> int main(void)

Отслеживать
ответ дан 3 мар 2015 в 15:35
VadimTukaev VadimTukaev
2,137 12 12 серебряных знаков 16 16 бронзовых знаков

Учитывая тот факт, что в C нет строк как типа данных, а есть массивы символов

char myString[10] 

последним элементом которого всегда является ‘\0’ — нулевой символ, используйте то, что применимо к массивам.

int len = sizeof(str)-1; // длина строки/размер массива за вычетом '\0' // учтите, что для русского текста каждый char весит 2 байта. printf("%i\t%c\n",i, str[i]); // печать содержимого в цикле 

В самом грубом виде ваша задача выглядит так:

#include void main() < char str[]="hello"; char temp[6]; int len = sizeof(str)-1; int i = 0; for (i=0; itemp[len+1] = '\0'; printf ("%s, %d\n", str, len); printf ("%s, %d\n", temp, sizeof(temp)-1); 

Отслеживать
ответ дан 28 фев 2015 в 12:59
2,813 2 2 золотых знака 13 13 серебряных знаков 30 30 бронзовых знаков
Oгромное Cпасибо :))))
28 фев 2015 в 13:15

char по определению имеет размер один байт, а не два. Если говорить про Юникодные символы (например, русский текст), то кол-во байт зависит от (нормализации и) кодировки такой как utf-8, utf-16le, cp1251, cp866. Если предположить, что закодированные символы (байты) хранятся в str , то нельзя обратить слово в многобайтовых кодировках простым обращением массива, например массив является буковкой ф в utf-8 — если перевернуть этот массив, то ничего осмысленного не получится (перевёрнутые байты не являются корректным utf-8 текстом).

28 фев 2015 в 18:19

Да. Вы правы. Код который я показал — действительно годится только для однобайтных кодировок. И насчет «char весит 2 байта» — это конечно я сильно не прав. Наверно, более верным будет сказать, что символы кодируются 2-ми или более байтами. Для более универсального решения нужно использовать что-то вроде wchar_t и/или какую-нть библиотеку для работы с Unicode. На самом деле мои знания о C весьма поверхностны.

Как выполнить реверс строки в C++

При разработке на C++ иногда возникает необходимость перевернуть строку. Это может быть как простой вывод перевернутой строки, так и постоянный реверс строки по её адресу.

Как решить обе эти задачи, вы узнаете в данном мануале. Здесь мы будем работать с разными стандартными и пользовательскими функциями.

Реверс строки – это операция, которая инвертирует порядок символов в строке. ПРедположим, что у нас есть переменная, которая содержит строку «JournalDev».

После реверса ‘str’ содержимое будет отображаться в обратном порядке. То есть, теперь ‘str’ будет содержать строку «veDlanruoJ».

Давайте посмотрим, какие существуют способы перевернуть строку в C++.

Функция reverse()

Встроенная функция reverse() выводит строку в обратном порядке. При этом в качестве аргументов выступают двунаправленные начальные и конечные итераторы.

Эта функция определена в алгоритме заголовочного файла. Приведенный ниже код показывает применение функции reverse():

#include #include #include using namespace std; int main()   string str = "Journal Dev reverse example"; reverse(str.begin(), str.end()); cout  return 0; >

Вывод будет выглядеть так:

Функция strrev()

strrev() — это встроенная функция C++, определенная внутри заголовочного файла cstring.h. Этот метод широко применяют для реверса C-строк (массивов символов).

Эта функция принимает только базовый адрес строки как аргумента и переворачивает ее соответствующим образом. Давайте посмотрим на примере, как перевернуть строку с помощью функции strlen() в C++.

#include #include using namespace std; int main()   char str[] ="Journal Dev reverse example"; strrev(str); cout  return 0; >

Приведенный выше код показывает работу функции strrev().

Вывод строки в обратном порядке

В отдельных случаях нам может понадобиться вывести строку в обратном порядке, а не изменять её. Например, это касается постоянных строк, которые в принципе нельзя изменить. Используя цикл, мы можем вывести любую строку в обратном порядке. Давайте посмотрим, как это делается.

#include #include using namespace std; int main()   string str="Journal Dev reverse example"; int i; cout  for(i = str.length() - 1; i >= 0; i--)  cout  > return 0; >

Вывод будет выглядеть так:

  • В приведенном выше коде мы сначала инициализировали строку ‘str’.
  • Обратите внимание, что внутри цикла for при выводе строки мы инициализировали итератор ‘i’ со значением str.length()-1. Это значит, что строку нужно вывести в обратном порядке, начиная с последнего индекса.
  • Обратите внимание: length() возвращает длину строки. То есть, для вывода строки в обратном порядке мы должны учитывать последний индекс, который должен быть length()-1, так как в массиве символов индексация начинается с 0.

Создание пользовательской функции реверса строки

Ранее мы уже разобрали, как выводить строку в обратном порядке, а также реверсировать её с помощью встроенных функций.

Теперь для реверса строки мы создадим свою функцию по имени My_rev().

#include #include #include using namespace std; char *My_rev(char *str)   int i,len=0,n; char temp; len=strlen(str); n=len-1; for(i = 0; i <=(len/2); i++)   temp=str[i]; str[i]=str[n]; str[n]=temp; n--; > return str; > int main()   char My_string[]="Journal Dev reverse example"; cout  My_rev(My_string); cout  return 0; >

Мы получим такой результат:

  • В приведенном коде My_rev() — это функция, которая реверсирует строку, при этом базовый адрес строки передается в качестве аргумента.
  • Внутри функции My_rev(), *str — это указатель, в котором хранится базовый адрес строки. В нашем примере str указывает на первый элемент строки My_string.
  • len хранит длину строки. Здесь n – это индекс последнего элемента.
  • В данной функции мы пытаемся поменять местами отдельные символы строки. Это значит, что мы продолжаем менять местами элементы с 0-го и n-го индекса, пока не дойдём до (len/2)-й позиции. В приведенном примере цикл for делает эту замену за нас, то есть технически переворачивает строку.
  • В конце мы возвращаем базовый адрес str в функцию main(), а строка выводится с помощью функции cout.

Как перевернуть строку в C++

Эта программа на C++ берет предложение от пользователя и меняет его, используя рекурсию.

#include using namespace std; // function prototype void reverse(const string a); int main() < string str; cout // function definition void reverse(const string str) < // store the size of the string size_t numOfChars = str.size(); if(numOfChars == 1) < cout else < cout >
Enter a sentence: margorp emosewa awesome program

В этой программе пользователя просят ввести строку, которая хранится в строковом объекте str .

Затем вызывается функция reverse(), которая является рекурсивной функцией.

Внутри этой функции мы сохраняем размер входной строки в переменной numOfChars.

cout 

Помните, что строки на самом деле представляют собой массивы символов, поэтому каждый отдельный символ строки может быть представлен как индекс массива строк str [] .

reverse(str.substr(0, numOfChars - 1));

Здесь substr() возвращает строку до второго последнего символа, который снова передается в функцию reverse().

При следующем вызове reverse() печатается второй последний символ, потому что строка содержит на один символ меньше. После этого один из последних символов снова вырезается из строки и передается в функцию reverse().

  • �� Преобразование восьмеричного числа в десятичное и наоборот в C++
  • �� Преобразование двоичного числа в восьмеричное и наоборот в C++
  • �� Вычисление степени числа с использованием рекурсии на C++

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

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