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

Разворот строки через указатель - C++

Восстановить пароль Регистрация
 
rizr
1 / 1 / 0
Регистрация: 13.01.2013
Сообщений: 71
09.03.2013, 21:44     Разворот строки через указатель #1
ну вообщем обычное задание развернуть строку наоборот, обычный метод я знаю а как реализвать черерз указатели?
for example:

C++
1
2
3
4
5
6
7
8
9
10
11
12
char *p=" i love c++"
 
написал но оно не работает )))
 
char *mas="12345678";
    
    for(int i=0,p=strlen(mas)-1;p>i;i++,p--)
    {
        char temp=*(mas+i);
        *(mas+i)=*(mas+p);
        *(mas+p)=temp;
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2013, 21:44     Разворот строки через указатель
Посмотрите здесь:

C++ В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель
написать программу разворот строки с указателем C++
Сравнение с 0 через указатель *char C++
C++ Как получить ссылку на указатель или указатель на указатель в массиве?
Степень вывести через указатель,a десятичный логарифм через функцию рекуренционную C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
09.03.2013, 22:24     Разворот строки через указатель #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
int main() {
 
    const int size=10;
    char* mas=new char[size];
    cin.getline(mas,10);
 
 
    for(int i=0,p=size-1;p>i;i++,p--)
    {
    char temp=*(mas+i);
    *(mas+i)=*(mas+p);
    *(mas+p)=temp;
    }
 
    for(int i=0;i<size;i++)
        cout<<mas[i]<<endl;
  return 0;
}
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
09.03.2013, 22:26     Разворот строки через указатель #3
C++
1
2
3
4
5
6
7
8
9
char tmp;
int sz = strlen(mas) -1;
 
for(int i = 0; i < strlen(mas)/2; ++i)
{
     tmp = *(mas + i);
     *(mas +i) = *(mas + sz - i);
     *(mas + sz - i) = tmp;
}
rizr
1 / 1 / 0
Регистрация: 13.01.2013
Сообщений: 71
09.03.2013, 22:59  [ТС]     Разворот строки через указатель #4
ну эти все примеры работают через NEW итд

но вот, а если строка задана как я показал
*p="bla bla bla" которую надо развернуть
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
09.03.2013, 23:09     Разворот строки через указатель #5
Цитата Сообщение от rizr Посмотреть сообщение
ну эти все примеры работают через NEW итд
эти примеры работают как с new так и со статически созданными строками

C++
1
char *p=" i love c++";
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
09.03.2013, 23:17     Разворот строки через указатель #6
но вот, а если строка задана как я показал
*p="bla bla bla" которую надо развернуть
А у тебя компилятор пропускает такую строку и не чего не требует ?
C++
1
char *mas="12345678";
Добавлено через 3 минуты
Может так сойдет
C++
1
2
char arr[]="bla bla bla";
    char * parr=arr;
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
09.03.2013, 23:20     Разворот строки через указатель #7
C++
1
2
3
4
5
6
char *str = "jfkfjljflajjfa";
char *bg, *en;
bg = str;
en = (str + strlen(str) -1);
for (;bg != en; bg++, en--)
   (*bg) ^= (*en) ^= (*bg) ^= (*en);
rizr
1 / 1 / 0
Регистрация: 13.01.2013
Сообщений: 71
09.03.2013, 23:53  [ТС]     Разворот строки через указатель #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    char *mas="jhgjhvj";
    for(int i=0,p=strlen(mas)-1; p>i; i++,p--)
    {
        char temp=*(mas+i);
        *(mas+i)=*(mas+p);
        *(mas+p)=temp;
    }
    for(int i=0;i<=strlen(mas)-1;i++)
        cout<<*(mas+i);
    getchar();
    return 0;
критует на этой строчке *(mas+i)=*(mas+p) Нарушение прав доступа при записи "0x00e47830"
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
10.03.2013, 00:01     Разворот строки через указатель #9
Ну так и должно быть нарушение прав доступа. Строковые литералы менять нельзя: нельзя в них ничего записывать, и как следствие менять местами символы, это константы, на форуме это часто обсуждалось.
char *mas="jhgjhvj";
Это указатель mas, указывающий на константную строку где-то в памяти, так называемый "строковый литерал". В общем, лучше почитай об этом, погугли этот термин. Зачем уж, мне браться своими словами кое как объяснять это, да ещё и путаясь в терминах?

Добавлено через 5 минут
Цитата Сообщение от kazak Посмотреть сообщение
C++
1
2
3
4
5
6
char *str = "jfkfjljflajjfa";
char *bg, *en;
bg = str;
en = (str + strlen(str) -1);
for (;bg != en; bg++, en--)
* *(*bg) ^= (*en) ^= (*bg) ^= (*en);
Я не понял, вы все сговорились? Казак, попробуй, проверь свой код, пожалуйста.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
10.03.2013, 00:11     Разворот строки через указатель #10
Работает, только for (;bg != en; bg++, en--) надо исправить на for (;bg < en; bg++, en--)
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
10.03.2013, 00:16     Разворот строки через указатель #11
так ты проверь. Ты его не проверял. Готов поспорить
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
10.03.2013, 00:21     Разворот строки через указатель #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream.h>
 
int main(int argc, char* argv[])
{
   char *str = "Stroka dly proverki";
   char *bg, *en;
   bg = str;
   en = (str + strlen(str) - 1);
   cout << str << endl;
   for (;bg < en; bg++, en--)
      (*bg) ^= (*en) ^= (*bg) ^= (*en);
   cout << str << endl;
   system("pause");
   return 0;
}
Разворот строки через указатель
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
10.03.2013, 00:42     Разворот строки через указатель #13
kazak, http://liveworkspace.org/code/1bfYil :/.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
10.03.2013, 02:52     Разворот строки через указатель #14
kazak, что за компилятор? Что за ОС? По идее должен быть сегфолт.
http://ru.wikipedia.org/wiki/%CE%F8%...F2%E0%F6%E8%E8
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,899
Записей в блоге: 2
Завершенные тесты: 1
10.03.2013, 08:08     Разворот строки через указатель #15
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
По идее должен быть сегфолт.
Не обязательно. Это UB и что будет в результате не известно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2013, 11:12     Разворот строки через указатель
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
10.03.2013, 11:12     Разворот строки через указатель #16
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
что за компилятор? Что за ОС?
Builder 6\Win XP
Yandex
Объявления
10.03.2013, 11:12     Разворот строки через указатель
Ответ Создать тему
Опции темы

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