Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.98/50: Рейтинг темы: голосов - 50, средняя оценка - 4.98
8 / 3 / 2
Регистрация: 12.02.2013
Сообщений: 68

ф-ция реверса строки

14.05.2013, 10:51. Показов 11858. Ответов 110
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
был вчера на собеседовании, попросили написать ф-цию реверса строки (поменять местами 1й и последний символы, 2й и предпоследний и т.д.), но ф-ция должна принимать параметром указатель на char т.е. на начало строки и все. я там немного тупанул но написал, вот хочу узнать есть ли решение получше моего.
вот код (писал в Embarcadero RAD Studio (Borland)):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//ф-ция принимает указатель на массив char с символом окончания строки '\0'
//и производит реверс полученного массива
void TForm1::reverce(char *str)
{
    char* end_str = &str[0];
 
    while (*end_str != '\0') ++end_str;
    
    char  buf;
    while (end_str > str)
    {
        --end_str;
        buf      = *str;
        *str     = *end_str;
        *end_str = buf;
        ++str;  
    }
}
кто захочет проверить, выносим кнопку, лабел и эдит на форму и в ивент на клик кнопки пишем:
C++
1
2
3
4
5
AnsiString str = Edit1->Text.c_str();
 
    reverce(str.c_str());
 
    Label1->Caption = str;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.05.2013, 10:51
Ответы с готовыми решениями:

Функция реверса строки
На собеседовании в одну компанию меня попросили на бумажке написать функцию реверса строки. Буквально парой дней раньше я услышал о том...

Написание программы реверса строки
Не могу понять в чем ошибка выдаёт (2 3 3 3 3 3 3 3 3 3) Прошу помощи в нахождении ошибки. #include "stdafx.h" #include...

Какая ф-ция в VC++ определяет длину строки???
Здравствуйте ... не могу разобраться со строками в VC++ помогите пожалуйста

110
What a waste!
 Аватар для gray_fox
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
16.05.2013, 20:03
Студворк — интернет-сервис помощи студентам
Поучаствую)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <cassert>
 
 
char *reverse(char * const str) {
   assert(str != 0);
 
   char * last = str;
   for ( ; *last != '\0'; ++last);
 
   for (char * first = str; first < --last; ++first) {
      char const tmp = *first;
      *first = *last;
      *last = tmp;
   }
        
   return str;
}
 
 
int main() {
   char empty[] = "";
   char one[]   = "a";
   char two[]   = "ab";
   char three[] = "abc";
   char many[]  = "abcdefghijklmnopqrstuvwxyz";
   
   std::cout << reverse(empty) << std::endl;
   std::cout << reverse(one)   << std::endl;
   std::cout << reverse(two)   << std::endl;
   std::cout << reverse(three) << std::endl;
   std::cout << reverse(many)  << std::endl;
}
0
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
17.05.2013, 09:30
Цитата Сообщение от gray_fox Посмотреть сообщение
Поучаствую)
обращаю и ваше внимание на то что если str указывает на начало сегмента и строка пустая вы войдете в цикл перестановки по причине префиксного декримента при проверке условия и изговняете целиком весь сегмент
1
What a waste!
 Аватар для gray_fox
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
17.05.2013, 09:51
Ок. Попробуем так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <cassert>
 
 
char *reverse(char * const str) {
   assert(str != 0);
 
   if (*str != '\0') {
      char * last = str;
      while (*++last != '\0');
 
      for (char * first = str; first < --last; ++first) {
         char const tmp = *first;
         *first = *last;
         *last = tmp;
      }
   }
        
   return str;
}
 
 
int main() {
   char empty[] = "";
   char one[]   = "a";
   char two[]   = "ab";
   char three[] = "abc";
   char many[]  = "abcdefghijklmnopqrstuvwxyz";
   
   std::cout << reverse(empty) << std::endl;
   std::cout << reverse(one)   << std::endl;
   std::cout << reverse(two)   << std::endl;
   std::cout << reverse(three) << std::endl;
   std::cout << reverse(many)  << std::endl;
}
0
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
17.05.2013, 10:18
Цитата Сообщение от gray_fox Посмотреть сообщение
так
вместо сравнений с нулем можно было бы просто использовать само выражение в качестве условия
C++
1
2
3
4
5
   assert(str);
 
   if (*str) {
      char * last = str;
      while (*++last); ...
0
17.05.2013, 10:27

Не по теме:

Цитата Сообщение от vxg Посмотреть сообщение
вместо сравнений с нулем можно было бы просто использовать само выражение в качестве условия
Мне явное указание больше по нраву.

0
17.05.2013, 10:32

Не по теме:

Цитата Сообщение от gray_fox Посмотреть сообщение
Мне явное указание больше по нраву.
так никто не делает. это признак того что человек не знает языка

0
17.05.2013, 10:34

Не по теме:

Цитата Сообщение от vxg Посмотреть сообщение
так никто не делает.
Я так делаю)
Цитата Сообщение от vxg Посмотреть сообщение
это признак того что человек не знает языка
Странный признак) Но ваше дело, да и я не профи.

0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
17.05.2013, 10:48
Цитата Сообщение от vxg Посмотреть сообщение
так никто не делает. это признак того что человек не знает языка
Полная запись условий - это своего рода страховка.
Если однажды в условии встретится класс с перегруженным "operator bool", - а такое
частенько делается, чтобы можно было возвращать объекты из функций с сохранением
семантики проверки ошибок, - условие выполнялось бы также, как и раньше.
Так что между "никто не делает" и "незнание языка" корреляции нет.
0
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
17.05.2013, 11:05
Цитата Сообщение от Убежденный Посмотреть сообщение
Если однажды в условии встретится класс с перегруженным "operator bool"
вы здесь такое видите? char * является описанным вами типом? нет? тогда к чему этот сферический конь в вакууме?
Цитата Сообщение от Убежденный Посмотреть сообщение
Так что между "никто не делает" и "незнание языка" корреляции нет
согласен. однако все буквари которые я читал приводили проверки вида
C++
1
2
int x;
if (x == 0) ...
в качестве примера графомании и детского сада
0
17.05.2013, 11:26

Не по теме:

Цитата Сообщение от vxg Посмотреть сообщение
if (x == 0) ...
А тут еще можно поговорить и про йода-кондишн:
C++
1
if (0 == x) ...

0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
17.05.2013, 14:12
Друзья, прекращаем оффтопить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.05.2013, 14:12

Программа реверса строки: почему на экран выводится мусор, вместо нужного текста?
Пишу программу реверса строки (меняет местами первый символ и последний, второй и предпоследний и т.д.). На экран выводится мусор, вместо...

Защита от реверса ( md5 )
Люди посоветуйте как сделать проверку по md5 файла. Всё работает, НО. Я когда считаю хэш и вставляю его в исходники, хэш уже билда сразу...

Реализация реверса массива
Первый и последний элемент массива трогать не надо. Как его толком перевернуть? По-разному пробовал уже, не хотят циферки по серединке...

Защита от реверса проекта
Подскажите, в какую сторону копать, хочу, чтобы программа не могла быть запущена в отладчике?

Ошибка в создании реверса массива
#include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; using namespace std; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
111
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru