Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
1 / 1 / 2
Регистрация: 13.01.2013
Сообщений: 71
1

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

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

Author24 — интернет-сервис помощи студентам
ну вообщем обычное задание развернуть строку наоборот, обычный метод я знаю а как реализвать черерз указатели?
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.03.2013, 21:44
Ответы с готовыми решениями:

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

Указатель типа void. Использование косвенного связывания через универсальный указатель
Необходимо использовать косвенного связывания через универсальный указатель, примерный вид: struct...

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

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

15
584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
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
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
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
1 / 1 / 2
Регистрация: 13.01.2013
Сообщений: 71
09.03.2013, 22:59  [ТС] 4
ну эти все примеры работают через NEW итд

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

C++
1
char *p=" i love c++";
0
584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
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
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
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
1 / 1 / 2
Регистрация: 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
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,488
Записей в блоге: 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
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
10.03.2013, 00:11 10
Работает, только for (;bg != en; bg++, en--) надо исправить на for (;bg < en; bg++, en--)
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,488
Записей в блоге: 1
10.03.2013, 00:16 11
так ты проверь. Ты его не проверял. Готов поспорить
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
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
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
10.03.2013, 00:42 13
kazak, http://liveworkspace.org/code/1bfYil :/.
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,488
Записей в блоге: 1
10.03.2013, 02:52 14
kazak, что за компилятор? Что за ОС? По идее должен быть сегфолт.
http://ru.wikipedia.org/wiki/%... 0%F6%E8%E8
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
10.03.2013, 08:08 15
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
По идее должен быть сегфолт.
Не обязательно. Это UB и что будет в результате не известно.
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
10.03.2013, 11:12 16
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
что за компилятор? Что за ОС?
Builder 6\Win XP
0
10.03.2013, 11:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2013, 11:12
Помогаю со студенческими работами здесь

Как через цикл сдвигать указатель на начало строки?
Как через цикл сдвигать указатель на начало строки? Нужен автоскроллинг для длинного текста на...

Разворот строки
Как лучше сделать прогу: &quot;цикл, который переварацивает строку&quot; (из abcd получится dcba) Я вроде...

Разворот фрагмента строки
Необходимо взять фрагмент данной строки между первой и последней одинаковыми буквами ('h')...

Разворот последовательности чисел в Python, через рекурсию
Добрый день уважаемые форумчане! Стоит следующая задача.Дана последовательность целых чисел,...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru