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

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

Войти
Регистрация
Восстановить пароль
 
gmb124
8 / 4 / 1
Регистрация: 11.04.2012
Сообщений: 54
#1

Переворот строки - C++

21.07.2012, 22:14. Просмотров 857. Ответов 5
Метки нет (Все метки)

Почему при использовании указателя ошибка, а при использование массива всё нормально?

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
void RevStr(char *str){
    char *start,*end;
    char t;
 
    start = str;
    end = &str[Length(str)-1];
 
    while(end > start){
        t = *start;
        *start = *end;
        *end = t;
 
        start++;
        end--;
    }
}
 
void main(){
   //     char *str="qwd"; ошибка
        char str[]="qwd";  
    
    RevStr(str);
    cout << str;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2012, 22:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переворот строки (C++):

Переворот строки - C++
Ребят,у меня есть 2 часа чтоб понять!УМОЛЯЮ, помогите...объясните в этой функции( которая переворачивает строку и читатет ее) строку ...

Переворот строки - C++
Добрый вечер. Нужно перевернуть строку 12345 в 54321. Подскажите, где неверно в коде. Если можно не кодом, а словами (идеей), чтобы...

Переворот строки рекурсией - C++
Всем привет! В книге Герберта Шилдта &quot;C++ Шаг за шагом&quot; глава: Рекурсии есть такой пример: //Переворот строки рекурсией #include...

Переворот строки. Необработанное исключение. Нарушения прав доступа - C++
void turn(char c, int step, int size) { if(step &lt; size&gt;&gt;1) { char temp = c; char temp2 = c; c =...

Переворот строки, не используя временные переменные и не осуществляя полного прохода по всей строке - C++
У вас есть переменная std::string str = &quot;abcdefghijklmop&quot;;Напишите код переворота строки, не используя временные переменные и не...

Переворот массива - C++
Как перевернуть массив на 180 градусов ? Помогите. Сам массив уже есть: #include &lt;iostream&gt; #include &lt;time.h&gt; #include...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
PreFX
25 / 20 / 1
Регистрация: 14.07.2012
Сообщений: 176
21.07.2012, 22:24 #2
Механизмы указателей и массивов немного различаются. Указатель хранит адрес переменной, но переменной-то в данном случае нет! А массив является не только адресом, но и, собственно, контейнером.
1
nameless
Эксперт C++
334 / 298 / 14
Регистрация: 16.06.2009
Сообщений: 486
21.07.2012, 23:12 #3
gmb124,

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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
const char * ReverseString(const char * str) {
   size_t length = strlen(str);
   char * temp = (char*)malloc((length + 1) * sizeof(char));
   memcpy(temp, str, length + 1);
   char * p_back = temp + length - 1;
   
   for (char * p = temp; p < p_back; p++, p_back--) {
      *p ^= *p_back;
      *p_back ^= *p;
      *p ^= *p_back;
   }
   
   return temp;
}
 
int main() {
   char str[] = "reverse";
   const char * p_str = "reverse";
   
   printf("%s %s", ReverseString(str), ReverseString(p_str));
}
http://liveworkspace.org/code/9e60b2...4786662edff0cf
0
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.07.2012, 23:14 #4
Цитата Сообщение от nameless Посмотреть сообщение
*p ^= *p_back;
*p_back ^= *p;
*p ^= *p_back;
Чем обычный swap не устроил?
0
nameless
Эксперт C++
334 / 298 / 14
Регистрация: 16.06.2009
Сообщений: 486
21.07.2012, 23:19 #5
Цитата Сообщение от soon Посмотреть сообщение
Чем обычный swap не устроил?
Да, так. Ничего особенного, для разнообразия, так сказать.
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.07.2012, 05:46 #6
Цитата Сообщение от gmb124 Посмотреть сообщение
char *str="qwd"
str - указатель на строковый литерал. Попытки изменения строкового литерала
*start = *end;
приводят к ошибке.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2012, 05:46
Привет! Вот еще темы с ответами:

реверсивный переворот - C++
Создать 2 объекта разработанного класса. Одной из компонент класса является динамическая символьная строка. В результате выполнения...

Переворот масива - C++
Здравствуйте. Помагите пожалучто, у меня как то криво масив переворачиваетса... #include &lt;iostream&gt; #include &lt;ctime&gt; using namespace...

Переворот массива - C++
Как переворачивают не обычных массив, а двухмерный ? К примеру 4x4 ?

Переворот слов - C++
Дали такие задания: Задание 1 В строке, содержащей несколько слов, разделенных пробелом, перевернуть каждое слово. Входные...


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

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

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