Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Кто знает самую короткую и красивую функцию переворота строки? / 25 сообщений из 69, страница 1 из 3
16.02.2005, 05:03
    #32917463
SergLet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
Есть char *a = "hack"; получить "kcah"! Самое главное элегантно!
...
Рейтинг: 0 / 0
16.02.2005, 05:16
    #32917468
Dubrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
Может и не элегантно, но вроде коротко. Для затравки я думаю, пойдет.
Самый очевидный вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#include <iostream.h>

void main(void)
{
  char str[]="hack";
  int len=strlen(str);

  for(int i= 0 ;i<len/ 2 ;i++)
  {
    char t=str[i];
    str[i]=str[len-i- 1 ];
    str[len-i- 1 ]=t;
  }
  cout<<str<<endl;
}
Если длина строки нечетная, ничего страшного, средний символ все равно никуда не перемещается.
P.S. А вообще идея хорошая, в свое время в журнале "ZX-Ревю" был такой раздел, назывался "Этюды", где люди предлагали самые эффективные способы выполнения каких-либо действий.

---
С уважением, Dubrov.
...
Рейтинг: 0 / 0
16.02.2005, 05:23
    #32917473
SergLet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
Я вот именно на эту тему и хотел удочку закинуть! Хочешь еще задачку на элегантное решение? Есть такая функция atoi ! Сделай то же самое сам ! Условия теже!!!
...
Рейтинг: 0 / 0
16.02.2005, 05:28
    #32917474
SergLet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
Я сначала решил вот так: (зацыни! )

void Reverse(char *src, char *dst)
{
for(int i = strlen(src)-1, a = 0; i >= 0; i--, a++)
{
dst[a] = src ;
}
}

Аргументы по ссылке! Но здесь входной и выходной массив! А, потом я пришел почти к тому же что и ты! Тренировать мозги иногда полезно! Так что насчет atoi?
...
Рейтинг: 0 / 0
16.02.2005, 05:33
    #32917476
SergLet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
Сорри - вот так!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
void Reverse(char *src, char *dst)
{    
	for(int i = strlen(src)- 1 , a =  0 ; i >=  0 ; i--, a++)
	{	    
	dst[a] = src[i];
	}
}
...
Рейтинг: 0 / 0
16.02.2005, 06:04
    #32917492
Dubrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
Попробую. Подожди пару дней, сегодня работы много.
---
Dubrov.
...
Рейтинг: 0 / 0
16.02.2005, 06:05
    #32917495
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
int atoi(char *a)
{
 char c = *a++;
 char sign = c;
 if (c == '-' || c == '+')
  c = *a++;
 int total =  0 ;
 while (c>='0' && c<='9' )
 {
   total =  10  * total + c;
   c = *a++;
  }
 if (sign == '-') return -total;
  else return total;
}
не мое.
это я мелкомягкие исходники поставляемые с dotnet студией перекоцал.
там у них поддержка многопоточности была добавлена, 64 битовых целых и юникода вроде.
...
Рейтинг: 0 / 0
16.02.2005, 06:08
    #32917496
Dubrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
Ну вот, не успел.
---
Dubrov.
...
Рейтинг: 0 / 0
16.02.2005, 06:15
    #32917499
SergLet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
Хм, попробую! Если от мелкомягких то - это либо индийцы либо китайцы навояли! Посмотрим!
...
Рейтинг: 0 / 0
16.02.2005, 06:16
    #32917500
SergLet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
Dubrov! Почему не успел! Успел успел! Давай свою идею ... все равно интересно!
...
Рейтинг: 0 / 0
16.02.2005, 07:54
    #32917553
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
а мне лень думать


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
16.02.2005, 08:16
    #32917567
FishingIsGood
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
Эллегантно так эллегантно:

Код: plaintext
1.
2.
3.
4.
5.
int main(int argc, char *argv[])
{
    char* str = "hack";
    reverse_copy(str, str + strlen(str), ostream_iterator<char>(cout));
    return EXIT_SUCCESS;
}
...
Рейтинг: 0 / 0
16.02.2005, 08:47
    #32917594
dwl
dwl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
8-)
Код: plaintext
1.
2.
3.
4.
std::string str("blabla");
//reverse order
str.rbegin();
std::copy( str.rbegin(), str.rend(), inserter( s, s.begin() ) );
...
Рейтинг: 0 / 0
16.02.2005, 08:52
    #32917599
dwl
dwl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
упс, звиняйте. копировать надо в другую строку 8-))). Если это копирование нужно.
Код: plaintext
1.
2.
3.
char *old = "test";
std::string str( old ); // need strlen?
std::string rev( str.rbegin(), str.rend() );
...
Рейтинг: 0 / 0
16.02.2005, 08:55
    #32917603
dwl
dwl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
а можно написать и при помощи swap. Только надо ли?
...
Рейтинг: 0 / 0
16.02.2005, 08:59
    #32917607
dwl
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
...
Рейтинг: 0 / 0
16.02.2005, 09:51
    #32917704
v6y
v6y
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
SergLetСорри - вот так!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
void Reverse(char *src, char *dst)
{    
	for(int i = strlen(src)- 1 , a =  0 ; i >=  0 ; i--, a++)
	{	    
	dst[a] = src[i];
	}
}

А так пойдет?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
#include <stdio.h>

void rev( char *s) {
 char *p=s;
 char c;
 if (!s) return;
 while (*p) p++; p--;  //p=s+strlen(s)-1
 while(p>s) {
  c=*p;  *p--=*s;  *s++=c;
 }
}

main() {

 char s[]="hackperehack";

 printf("before: %s\n",s);
 rev(s);
 printf("after: %s\n",s);

}

Просто у вас с Дубровым, на мой, конечно, скромный взгляд, как то по паскалевски получилось А C он на то и C, чтоб сторонних наблюдателей как можно сильнее запутать
...
Рейтинг: 0 / 0
16.02.2005, 10:30
    #32917809
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
Мне вспоминается один шуточный тест который
я нашел в дебрях FIDO-net.

Задание: дана переменная x. Написать программу
на любом языке программирования которая проверяет
если x=3 то записывает в x число 2. И наоборот.

По результатам теста составляется портрет программиста:
его характер, склонности к математике, оптимизации,
парадигмам искусственного интеллекта.

Проверьте себя, коллеги. :)
...
Рейтинг: 0 / 0
16.02.2005, 10:37
    #32917830
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
#include <stdio.h>
#include <stdlib.h>
int main(int argn, char** argc)
{
 if (argn< 2 )return  0 ;
 int x=atoi(argc[ 1 ]);
 x^= 1 ;
 printf("%i\n",x);
}
...
Рейтинг: 0 / 0
16.02.2005, 10:48
    #32917865
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
Круто! Способность к оптимизации на низком уроване!!

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

Смелее!
...
Рейтинг: 0 / 0
16.02.2005, 10:59
    #32917903
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
это наверное в "программирование" надо такие темы поднимать.
тут не много представителей других языков шатается :-)
...
Рейтинг: 0 / 0
16.02.2005, 11:10
    #32917931
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
самый классный вариант - сделать ассемблерную вставку push...push до нуля, заодно определяем длину. А потом делаем pop...pop...
...
Рейтинг: 0 / 0
16.02.2005, 11:14
    #32917945
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
стековые операции - не самые эффективные, насколько я помню.
хотя на спектруме такой подход рулил
...
Рейтинг: 0 / 0
16.02.2005, 11:21
    #32917968
v6y
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);
}
...
Рейтинг: 0 / 0
16.02.2005, 11:22
    #32917969
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает самую короткую и красивую функцию переворота строки?
alex_kстековые операции - не самые эффективные, насколько я помню.
хотя на спектруме такой подход рулил
некоторые переменные можно сделать register, и пожалуй это будет самый быстродействующий способ
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Кто знает самую короткую и красивую функцию переворота строки? / 25 сообщений из 69, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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