Форум программистов, компьютерный форум CyberForum.ru

Перевернуть строку - C++

Восстановить пароль Регистрация
 
Rakot568
15 / 15 / 1
Регистрация: 11.04.2013
Сообщений: 170
12.10.2016, 09:41     Перевернуть строку #1
Написать функцию, которая переставляет символы строки по принципу обмена первого и последнего, второго и предпоследнего и т.д.

Написал так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void reverse()
{
   char b;
   int l=strlen(str);
 for (int i=1; (l/2); i++)
 {
   b=str[i];
   str[i]=str[l-i+1];
   str[l-i+1]=b;
 }
   printf("Perevernutaya stroka:\n");
   cout << str<< endl;
}
Не работает.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2016, 09:41     Перевернуть строку
Посмотрите здесь:

Перевернуть строку C++
C++ Перевернуть строку
Перевернуть строку. В чем проблема? C++
C++ Перевернуть строку
работа со строками. Перевернуть, заданную пользователем строку, в отдельной функции C++
Строковый тип. Перевернуть строку C++
C++ Ввести с клавиатуры строку символов. Перевернуть каждое четное слово в строке.
C++ Перевернуть строку, в чем ошибка?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4278 / 3709 / 1246
Регистрация: 14.04.2014
Сообщений: 14,503
12.10.2016, 09:52     Перевернуть строку #2
Условие как следует запиши - где i?
Байт
 Аватар для Байт
13955 / 8786 / 1222
Регистрация: 24.12.2010
Сообщений: 15,913
12.10.2016, 09:55     Перевернуть строку #3
Цитата Сообщение от Rakot568 Посмотреть сообщение
str[i]=str[l-i+1];
При i=1 l-i+1 = l - выход за пределы массива
Rakot568
15 / 15 / 1
Регистрация: 11.04.2013
Сообщений: 170
12.10.2016, 10:04  [ТС]     Перевернуть строку #4
Цитата Сообщение от Байт Посмотреть сообщение
str[i]=str[l-i+1];
При i=1 l-i+1 = l - выход за пределы массива
Если i=1, то str[1]=str[l] => в первый элемент записывается последний символ, или strlen считает и символ \0?
Байт
 Аватар для Байт
13955 / 8786 / 1222
Регистрация: 24.12.2010
Сообщений: 15,913
12.10.2016, 10:07     Перевернуть строку #5
Rakot568, str[strlen(str)] - это как раз терминальный ноль.
В массиве из k элементов последний индекс k-1
Rakot568
15 / 15 / 1
Регистрация: 11.04.2013
Сообщений: 170
12.10.2016, 16:17  [ТС]     Перевернуть строку #6
"Спасибо" всем "знатокам", и тем, кто отвечает загадками.
Разобрался сам.
Происходило зацикливание и нужно было изменять for, а значение переменной-счетчика i увеличивать с 0, а не с 1.
Рабочий код, может кому еще пригодится:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <string.h>
 
char str[30];
int l;
void reverse()
{
 printf("Vvedite stroku\n");
 cin.getline(str,sizeof(str));
 char b;
 l=strlen(str);
 for (int i=0; (i!=(l/2)); i++)
 {
   b=str[i];
   str[i]=str[l-(i+1)];
   str[l-(i+1)]=b;
  }
   printf("Perevernutaya stroka:\n");
   cout << str<< endl;
   getch();
}
Yandex
Объявления
12.10.2016, 16:17     Перевернуть строку
Ответ Создать тему
Опции темы

Текущее время: 03:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru