При разработке на 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.
Создание пользовательской функции реверса строки
Ранее мы уже разобрали, как выводить строку в обратном порядке, а также реверсировать её с помощью встроенных функций.
Немецкий язык, 15 урок. Обратный порядок слов. Сегодня-завтра-послезавтра
Теперь для реверса строки мы создадим свою функцию по имени 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; >
Изменить порядок слов в предложении на обратный — C (СИ)
ема говорит сама за себя является строка. надо инвертировать слова копируя в другую строку. пример: -> я иду домой -> домой иду я ГЛАВНОЕ ЧТОБЫ НА ВЫХОДЕ БЫЛ СТРОКА С 0 В КОНЦЕ помогите!
#include #include #include #include #define N 100 int main(void) < //clrscr(); char mas1[N]; char mas2[N]; int i, j, k, u; printf(«ntInput sentence ->nntt»); gets(mas1); k=strlen(mas1); u=k; printf(«ntSentence with reverse words ->nntt»); for (i=k; i>=0; i—) if (mas1[i]==’ ‘) < for (j=i+1; jfor (i=0; i
а то у меня получается не строка а просто вывод по частям
Код к задаче: «Изменить порядок слов в предложении на обратный»
Листинг программы
#include #include #include int main() < char str[1025];//Будет содержать в себе предложение char buf[1025];//Буффер строки str char **words;//Будет содержать в себе слова из str char *tok;//Указатель на текущее слово в предложении char delim[] = » .,;!;//Разделители между словами char chr;//Символьная переменная, для организации повторного ввода и т.д. long nCount;//nCount — будет содержать в себе число слов do < printf(«Enter sentence :n»); scanf(«%[^n]%c»,str, sprintf(buf,»%s»,str); tok = strtok(buf,delim);//Выделяем из строки 1-е слово nCount = 0;//Обнуляем счётчик слов while(tok) < nCount++;//Считаем слова //Продолжаем выделять из строки слова tok = strtok(NULL,delim); >if(nCount == 0) printf(«Input string is emptyn»); else < nCount = 0; sprintf(buf,»%s»,str); //Выделяем память на подстроки со словами из str words = (char **)malloc(nCount*sizeof(char *)); //Заново разбиваем исходную строку на слова tok = strtok(buf,delim);//Выделяем из строки 1-е слово while(tok) < //Память под подстроку со словом words[nCount] = (char *)malloc(strlen(tok)*sizeof(char)); sprintf(words[nCount],»%s»,tok); //Продолжаем выделять из строки слова tok = strtok(NULL,delim); nCount++; >printf(«Sentence with reverse wordsn»); //А теперь выводим words в обратном порядке buf[0] = ‘