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

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

Войти
Регистрация
Восстановить пароль
 
 
rizr
1 / 1 / 0
Регистрация: 13.01.2013
Сообщений: 71
#1

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

09.03.2013, 21:44. Просмотров 883. Ответов 15
Метки нет (Все метки)

ну вообщем обычное задание развернуть строку наоборот, обычный метод я знаю а как реализвать черерз указатели?
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;
    }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2013, 21:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разворот строки через указатель (C++):

написать программу разворот строки с указателем - C++
помогите пожалуйста срочно

Степень вывести через указатель,a десятичный логарифм через функцию рекуренционную - C++
Написать функции,где 3 натуральных числа a,b,c(a/b-десятичный логарифм).Чтобы степень вывести через указатель,a десятичный логарифм через...

Быстрее ли вывов функции, переданной через параметр шаблона, чем через простой указатель на функцию? - C++
Здравствуйте! Есть два варианта передачи некоторой переменной типа "указатель на функцию" в класс - через параметр шаблона и просто с...

В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель - C++
Друзья! Всем привет. Вот код: class otets { public: void f (void (otets::*p)()); private: void echo_f (){}; ...

Как получить ссылку на указатель или указатель на указатель в массиве? - C++
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения указателей, передаваемых в функцию. Если...

Обращение к функции через указатель - C++
Добрый день.Объясните для незнающего след.код:в частности строку номер:6class ListItem { public: void Append(ListItem *pItem) { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
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;
}
1
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 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;
}
1
rizr
1 / 1 / 0
Регистрация: 13.01.2013
Сообщений: 71
09.03.2013, 22:59  [ТС] #4
ну эти все примеры работают через NEW итд

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

C++
1
char *p=" i love c++";
0
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
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;
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
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);
0
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"
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 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);
Я не понял, вы все сговорились? Казак, попробуй, проверь свой код, пожалуйста.
1
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
10.03.2013, 00:11 #10
Работает, только for (;bg != en; bg++, en--) надо исправить на for (;bg < en; bg++, en--)
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
10.03.2013, 00:16 #11
так ты проверь. Ты его не проверял. Готов поспорить
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
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;
}
Разворот строки через указатель
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
10.03.2013, 00:42 #13
kazak, http://liveworkspace.org/code/1bfYil :/.
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
10.03.2013, 02:52 #14
kazak, что за компилятор? Что за ОС? По идее должен быть сегфолт.
http://ru.wikipedia.org/wiki/%CE%F8%...F2%E0%F6%E8%E8
0
Croessmah
Эксперт CЭксперт С++
13237 / 7509 / 847
Регистрация: 27.09.2012
Сообщений: 18,448
Записей в блоге: 3
Завершенные тесты: 1
10.03.2013, 08:08 #15
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
По идее должен быть сегфолт.
Не обязательно. Это UB и что будет в результате не известно.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2013, 08:08
Привет! Вот еще темы с ответами:

Написать функцию через указатель - C++
Написать функцию, которая принимает три параметра по адресу через указатель и находит максимальное значение. Функция не возвращает значение...

Приведение типа через указатель - C++
#include &lt;iostream&gt; using namespace std; int main() { double b = 2.3; int* pb; pb = (int*)&amp;b; *pb =...

Передача массива через указатель - C++
Надо передать массив в функцию через указатель, я сделал, так но что то программа долго думаете #include &lt;iostream&gt; #include ...

Передача данных через указатель - C++
#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string&gt; #include &lt;fstream&gt; #include &quot;func.h&quot; #include...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.03.2013, 08:08
Ответ Создать тему
Опции темы

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