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

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

Восстановить пароль Регистрация
 
gmb124
8 / 4 / 1
Регистрация: 11.04.2012
Сообщений: 54
21.07.2012, 22:14     Переворот строки #1
Почему при использовании указателя ошибка, а при использование массива всё нормально?

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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2012, 22:14     Переворот строки
Посмотрите здесь:

C++ Переворот строки
Переворот строки C++
C++ Переворот строки. Необработанное исключение. Нарушения прав доступа
Переворот слов C++
Переворот массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PreFX
25 / 20 / 1
Регистрация: 14.07.2012
Сообщений: 176
21.07.2012, 22:24     Переворот строки #2
Механизмы указателей и массивов немного различаются. Указатель хранит адрес переменной, но переменной-то в данном случае нет! А массив является не только адресом, но и, собственно, контейнером.
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 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
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.07.2012, 23:14     Переворот строки #4
Цитата Сообщение от nameless Посмотреть сообщение
*p ^= *p_back;
*p_back ^= *p;
*p ^= *p_back;
Чем обычный swap не устроил?
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
21.07.2012, 23:19     Переворот строки #5
Цитата Сообщение от soon Посмотреть сообщение
Чем обычный swap не устроил?
Да, так. Ничего особенного, для разнообразия, так сказать.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.07.2012, 05:46     Переворот строки #6
Цитата Сообщение от gmb124 Посмотреть сообщение
char *str="qwd"
str - указатель на строковый литерал. Попытки изменения строкового литерала
*start = *end;
приводят к ошибке.
Yandex
Объявления
22.07.2012, 05:46     Переворот строки
Ответ Создать тему
Опции темы

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