powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Кто знает самую короткую и красивую функцию переворота строки?
25 сообщений из 69, страница 2 из 3
Кто знает самую короткую и красивую функцию переворота строки?
    #32917991
FishingIsGood
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
v6y maytonКруто! Способность к оптимизации на низком уроване!!

А еще у кого есть варианты?

Смелее!

Круто, но слишком понятно Поэтому несколько переделаю код alex_k-я
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
void main(int argc, char **argv) {
 int x;
 if (argc< 2 ) return;
 x=atoi(argv[ 1 ]);
 (x== 3 ) ? (x= 2 ) : ( (x== 2 ) ? (x= 3 ) : (x) );
 printf("%i\n",x);
}



Код: plaintext
1.
2.
3.
int convert(int x)
{
    return ( x >  0  && ( (x >>  1 ) & 0x1 ) ) ? x ^ 0x1 : x;
}
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32917993
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно рассмотреть концепцию интерфейса перевернутой строки. То есть переопределить строковые операции для обратных строк.

Пример кода на "псевдо-языке":

Код: plaintext
1.
2.
3.
string s1="Hack";
IRevstring s2=(IRevsting)s1;
out << s2;

Выигрываем на времени выполнения. И получаем благодарность от жителей стран Востока которые пишут справа налево.
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32918008
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВыигрываем на времени выполнения. И получаем благодарность от жителей стран Востока которые пишут справа налево.

О , как
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32918013
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 FishingGod

Молодец!

Бонус за функциональный подход!
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32918023
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JibSkeart maytonВыигрываем на времени выполнения. И получаем благодарность от жителей стран Востока которые пишут справа налево.

О , как

Что как? Выигрываем? Или получаем благодарность?
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32918045
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМожно рассмотреть концепцию интерфейса перевернутой строки. То есть переопределить строковые операции для обратных строк.

Пример кода на "псевдо-языке":

Код: plaintext
1.
2.
3.
string s1="Hack";
IRevstring s2=(IRevsting)s1;
out << s2;

Выигрываем на времени выполнения. И получаем благодарность от жителей стран Востока которые пишут справа налево.

А каким образом выигрываем на времени выполнения?
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32918062
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обьясняю популярно. Строка НЕ ПЕРЕВОРАЧИВАЕТСЯ. Изменяются методы ввода-вывода строки на консоль и строковые операции.
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32918167
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОбьясняю популярно. Строка НЕ ПЕРЕВОРАЧИВАЕТСЯ. Изменяются методы ввода-вывода строки на консоль и строковые операции.
Ну тогда для доступа к отдельным частям строки все равно придется применять некие арифметические операции: типа str[j] должно вернуть str[len-j-1] (j=0,len-1) и т.д. Может тогда проще один раз перевернуть и не париться? Или я опять вашу идею недопонял
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32918440
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v6y maytonОбьясняю популярно. Строка НЕ ПЕРЕВОРАЧИВАЕТСЯ. Изменяются методы ввода-вывода строки на консоль и строковые операции.
Ну тогда для доступа к отдельным частям строки все равно придется применять некие арифметические операции: типа str[j] должно вернуть str[len-j-1] (j=0,len-1) и т.д. Может тогда проще один раз перевернуть и не париться? Или я опять вашу идею недопонял

Вы все верно поняли. Но все зависит от конечных целей вашей разработки.

К примеру .. если вы умножаете две матрицы (class Matrix), то по правилам математики, строка первой матрицы должна умножатся на столбец другой. Но для этого нам не нужно переворачивать вторую. Мы можем определить интерфейс ITransposeMatrix для класса Matrix где операция [i,j] будет возвращать то что требуется без перестановок в оперативной памяти. Сравнивая затраты на операцию [] и физическую реорганизацию элементов в двумерном массиве, я могу сказать что первое - предпочтительнее.

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

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

С уважением
Mayton
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32918508
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergLetЕсть char *a = "hack"; получить "kcah"! Самое главное элегантно!

А если взять из StrUtils функцию ReverseString("hack");

C++Builder 6

Note: This method does not work with multibyte character sets.
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32918568
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonК примеру .. если вы умножаете две матрицы ...едпочтительнее
спасибо, было оч интересно увидеть красивое решение проблемы, к-рую как-то решал сам =)
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32918784
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dwlвобчем главная идея - используйте STL, и жить станет проще
Код: plaintext
1.
2.
3.
4.
5.
char *old = "test";
std::string str( "new" ); // need strlen?

std::reverse( str.begin(), str.end() );
if( old ) std::reverse( old, old+strlen(old)- [b]1 [/b] ); //overflow danger, check size


Зачем отнимать 1? Все стандартные алгоритмы принимают полуоткрытые интервалы, так что правильно так:

Код: plaintext
std::reverse( old, old+strlen(old)); 
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32918814
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и чтобы было совсем правильно, переменная old должна быть объявлена как показано ниже, так как объевление переменной old как char *old = "1234" скрывает неявный const и программа просто не скомпилируется:
Код: plaintext
1.
2.
char old[] = "1234";
std::reverse( old, old+strlen(old)); 
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32919614
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут поделились интересным кодом .
его содержимое говорит само за себя, любопытная штука.
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32920071
Dubrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня atoi почти как у alex_k, потому и написал что не успел.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
int my_atoi(const char *str)
{
  int sign= 1 ,n= 0 ;
  char c;

  switch(*str)
  {
  case '-': sign=- 1 ;
  case '+': str++;
  }

  while(c=*str++,isdigit(c))n=n* 10 +c-'0';

  return sign*n;
}
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32920091
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2зёма
а чего, если первый символ равен '-' то тогда не надо делать str++?
или он сделается, а как я не догоняю?
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32920196
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_k2зёма
а чего, если первый символ равен '-' то тогда не надо делать str++?
или он сделается, а как я не догоняю?

Ты видишь, что break-ов в switch-e нет? Вот в этом вся идея. То есть + или -, str++ выполнится в любом случае.
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32920212
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не умею swith ем пользоваться :-)
как-то не прижилось после паскалевково case слишком навороченно както :-)
надо разбираться конечно...
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32922138
Dubrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Широков
Ты видишь, что break-ов в switch-e нет? Вот в этом вся идея. То есть + или -, str++ выполнится в любом случае.

Совершенно верно.
А вообще, switch в C мне намного больше нравится чем case в Паскале.
---
С уважением, Dubrov.
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32922165
Dubrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dwlвобчем главная идея - используйте STL, и жить станет проще
Код: plaintext
1.
2.
3.
4.
5.
char *old = "test";
std::string str( "new" ); // need strlen?

std::reverse( str.begin(), str.end() );
if( old ) std::reverse( old, old+strlen(old)- 1  ); //overflow danger, check size

Задача стояла - написать ф-цию переворота строки, а не использовать что-то написаное кем-то. (Просьба не обижаться, это просто константация факта, а не наезд).
---
С уважением, Dubrov.
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32922202
Siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дайте и мне шашкой помахать :)

Код: plaintext
1.
2.
char bck[MAX_PATH], str[MAX_PATH]="back", *p=bck, *s=str;
*(p+=strlen(str))--= 0  ;
while(*p-- = *s++);

JibSkeart, ты письмо получил?
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32922222
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё короче:

Код: plaintext
1.
char str[MAX_PATH]="back", *s=str, *p=s+strlen(str)- 1 ;
while(p>s){ *s++=(*p--=(*s=*s^*p)^*p)^*s;}
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32922304
dwl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dwl
Гость
DubrovУ меня atoi почти как у alex_k, потому и написал что не успел.
не учитывает граничные значения интов и ошибку переполнения.

насчет "переворота"
Код: plaintext
1.
2.
3.
4.
5.
void str_reverse(char* Begin, char* End)
{	
	for (; Begin < End; ++Begin)
		std::iter_swap(Begin, --End);
}
Устроит?
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32922337
Dubrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dwl
не учитывает граничные значения интов и ошибку переполнения.

В книге Р.Жешке "Толковый словарь языка C" в описании функции atoi написано:
... если результат превосходит MAX_INT, происходит ошибка ввода-вывода ... результат функции не определен. Так что как я понимаю отслеживание таких глюков должен производить программист использующий функцию, а не ее (функции) разрабочик. Как поведет себя следующая конструкция:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#include <stdio.h>

void input(char *str)
{
  scanf("%s",str);
}

void main(void)
{
  char login[ 10 ];
  input(login)
}
если я введу стоку длиной 74 символа?
---
С уважением, Dubrov.
...
Рейтинг: 0 / 0
Кто знает самую короткую и красивую функцию переворота строки?
    #32922343
Dubrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ввобще, давайте перенесем это обсуждение из "C++" в "Программирование", интересно как эту задачу решат люди сидящие на других языках. Просто я не знаю как это сделать, с кем договариваться (с модератором, наверное?).
---
С уважением, Dubrov.
...
Рейтинг: 0 / 0
25 сообщений из 69, страница 2 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Кто знает самую короткую и красивую функцию переворота строки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]