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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
Seniorus
2 / 2 / 0
Регистрация: 08.11.2011
Сообщений: 10
#1

Изменение порядка символов в строке s на противоположный - C++

18.11.2011, 12:51. Просмотров 2255. Ответов 8
Метки нет (Все метки)

Помогите, пожалуйста.
Функция - Reverse(s). Назначение - изменение порядка символов в строке s на противоположный.
При реализации функции запрещается пользоваться функциями библиотек языка C.

Я написал вот так, но у меня возникла проблема при возвращении переменной temp (добавляются символы к строке). И я использовал функции библиотек языка C, но не знаю как без них.

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
36
#include "stdafx.h"
#include "stdafx.h"
#include <iostream>
#include "conio.h"
#include "windows.h"
#include <iomanip>
 
using namespace std;
 
char* reverse ( char* str )
 {
    int count = strlen(str);
    char* temp = (char *) malloc(strlen(str)*sizeof(char));
    temp +=count;   
 
    while ( *str != '\0') 
    {
        *temp = *str;
        str++;
        if(*str != '\0')
            temp--;
    }
 
    return  temp;
 }
 
 int main()
 
 {
 char array [] = {"1234567890"};
 cout << array << endl;
 _getch();
 char * str  = reverse(array);
 cout << reverse(array) << endl;
 _getch();
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2011, 12:51     Изменение порядка символов в строке s на противоположный
Посмотрите здесь:

В каждой строке матрицы сменить знак максимального по модулю элемента на противоположный C++
C++ При выполнении определенного условия поменять порядок следования символов строки на противоположный
C++ В каждой строке матрицы найти максимальный элемент и заменить его на противоположный
Изменение порядка слов в строке на обратный C++
Изменение порядка слов в строке на обратный C++
C++ В каждой строке матрицы найти максимум и заменить его на противоположный элемент
C++ Работа с файлами: изменение регистра символа на противоположный
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
Эксперт C
15276 / 9678 / 1436
Регистрация: 24.12.2010
Сообщений: 18,014
18.11.2011, 14:15     Изменение порядка символов в строке s на противоположный #2
C
1
2
3
4
int count = strlen(str);
char* temp = (char *) malloc((count+1)*sizeof(char));
temp[count] = '\0';
temp += count;
Добавлено через 5 минут
И вообще твой остальной код возможно и правильный, но переусложненный и опасный.
temp+=count я бы вообще выкинул и сделал бы так
C
1
for(i=0;i<count;i++) temp[count-i-1] = str[i];
mc.Duck
Заблокирован
18.11.2011, 14:21     Изменение порядка символов в строке s на противоположный #3
Seniorus, вариант первый (без использования другого массива символов):
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
#include <iostream>
#include <cstdlib>
using namespace std;
 
char* reverse ( char *str )
 {
      int length_str = strlen(str);
      int iter=length_str / 2;
      for(int i=0;i<iter;i++)
      {
              char ch=str[i];
              str[i]=str[length_str-i-1];
              str[length_str-i-1]=ch;
              }
 
 
        return  str;
 }
 
 int main()
 
 {
 char array [] = {"123456789"};
 cout <<"1 >  "<< array << endl;
 char *str  = reverse(array);
 cout <<"2 >  "<< str<< endl;
 system("Pause");
 }
и вариант два (с использованием другого массива символов) здесь все до безумия просто:
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 <iostream>
#include <cstdlib>
using namespace std;
 
char* reverse ( char *str )
 {
      int length_str = strlen(str);
      char *str2 = new char[length_str];
      for(int i=0;i<length_str;i++)
      str2[i]=str[length_str-i-1];
      
        return  str2;
 }
 
 int main()
 
 {
 char array [] = {"123456789"};
 cout <<"1 >  "<< array << endl;
 char *str  = reverse(array);
 cout <<"2 >  "<< str<< endl;
 system("Pause");
 }
Байт
Эксперт C
15276 / 9678 / 1436
Регистрация: 24.12.2010
Сообщений: 18,014
18.11.2011, 14:21     Изменение порядка символов в строке s на противоположный #4
Что касается функций языка Си, то если ты обязательно хочешь создать новую строку, без malloc здесь не обойтись. А без strlen - запросто
C
1
for(count=0; s[count]!='\0'; count++) ;
Как обойтись без getch я тоже не представляю
Thinker
Эксперт C++
4219 / 2193 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.11.2011, 14:28     Изменение порядка символов в строке s на противоположный #5
C
1
2
3
4
5
6
7
8
9
10
11
12
13
void Reverse(char *s)
{
   int i = 0, j;
   char buf;
   for (j = 0; s[j]; j++)
      ;
   j--;
   while(i < j)
   {
       buf = s[i]; s[i] = s[j]; s[j] = buf;
       i++; j--;
   }
}
mc.Duck
Заблокирован
18.11.2011, 14:31     Изменение порядка символов в строке s на противоположный #6
Байт, ааа, ну это другое дело. Задание доконца не дочитал) Спасибо.
Seniorus
2 / 2 / 0
Регистрация: 08.11.2011
Сообщений: 10
18.11.2011, 15:41  [ТС]     Изменение порядка символов в строке s на противоположный #7
Всем спасибо. Я сделал еще так:
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 "stdafx.h"
#include <iostream>
#include "conio.h"
#include "windows.h"
#include <iomanip>
 
using namespace std;
 
 
void reverse (char *s);
 
// Вывод начальных данных
int main()
{
    char str [] = "Hello My Dear Friend";
    cout << str << endl;
    _getch();
    reverse (str);
    return 0;
}
 
// Вывод строки в обратном порядке
void reverse (char *s)
 
{
    if (*s)
        reverse (s+1);
    else
        return;
 
    cout << *s;
    _getch();
}
Байт
Эксперт C
15276 / 9678 / 1436
Регистрация: 24.12.2010
Сообщений: 18,014
18.11.2011, 20:01     Изменение порядка символов в строке s на противоположный #8
Seniorus, Класс! Остроумно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2013, 17:56     Изменение порядка символов в строке s на противоположный
Еще ссылки по теме:

В каждой строке найти максимум и заменить его на противоположный по знаку элемент C++
C++ В каждой строке матрицы найти максимум и заменить его на противоположный элемент
C++ Изменение порядка появления символов в консоли
C++ В каждой строке текста из файла сменить порядок символов на противоположный
C++ В строке символов найти максимальную подпоследовательность символов, являющуюся палиндромом

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

Или воспользуйтесь поиском по форуму:
SamLokers
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 52
18.10.2013, 17:56     Изменение порядка символов в строке s на противоположный #9
mc.Duck, скажите пожалуйста почему вы в первом варианте, строку делите на 2 ??
int iter=length_str / 2;
Yandex
Объявления
18.10.2013, 17:56     Изменение порядка символов в строке s на противоположный
Ответ Создать тему
Опции темы

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