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

Перевернуть строку. В чем проблема? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Oleg_Brovko
 Аватар для Oleg_Brovko
8 / 8 / 1
Регистрация: 07.03.2012
Сообщений: 57
22.04.2012, 20:58     Перевернуть строку. В чем проблема? #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
25
#include <iostream>
 
using namespace std;
 
void swapstr(char* str)
{
 
    for(int i=0; i<strlen(str)/2-1;i++)
    {
        char c=str[i];
        str[i]=str[strlen(str)-i-1];
        str[strlen(str)-i-1]=c;
        
 
    }
}
 
int main()
{
    char* str="My string";
    cout<<"Old string:"<<str<<endl;
    swapstr(str);
    cout<<"New string:"<<str<<endl;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2012, 20:58     Перевернуть строку. В чем проблема?
Посмотрите здесь:

Перевернуть строку C++
C++ Перевернуть строку
в чем проблема? вывод в файл C++
C++ Перевернуть строку
работа со строками. Перевернуть, заданную пользователем строку, в отдельной функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Catstail
Модератор
 Аватар для Catstail
21502 / 10255 / 1670
Регистрация: 12.02.2012
Сообщений: 17,141
22.04.2012, 21:07     Перевернуть строку. В чем проблема? #2
Объявить строку нужно вот так:

C++
1
2
    char str[100];
    strcpy(str,"My string");
А ты пытаешься изменить строковую константу.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
22.04.2012, 21:11     Перевернуть строку. В чем проблема? #3
Под строку не выделена память. У тебя это не массив символов, а лишь указатель на начало.
Правильнее так
C++
1
char str[]="My string";
Oleg_Brovko
 Аватар для Oleg_Brovko
8 / 8 / 1
Регистрация: 07.03.2012
Сообщений: 57
22.04.2012, 21:15  [ТС]     Перевернуть строку. В чем проблема? #4
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Под строку не выделена память. У тебя это не массив символов, а лишь указатель на начало.
Правильнее так
C++
1
char str[]="My string";
... Спасибо большое за коментарий!
Catstail
Модератор
 Аватар для Catstail
21502 / 10255 / 1670
Регистрация: 12.02.2012
Сообщений: 17,141
22.04.2012, 21:19     Перевернуть строку. В чем проблема? #5
Не выделена память? А почему же тогда код:

C++
1
2
    char* str="My string";
    cout<<"Old string:"<<str<<endl;
нормально печатает строку и нормально завершается?
Oleg_Brovko
 Аватар для Oleg_Brovko
8 / 8 / 1
Регистрация: 07.03.2012
Сообщений: 57
22.04.2012, 21:21  [ТС]     Перевернуть строку. В чем проблема? #6
А в чем тогда проблема? Хотел бы вникнуть в суть...
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
22.04.2012, 21:28     Перевернуть строку. В чем проблема? #7
Catstail, ну что значит не выделена? всё прекрасно выделено, иначе откуда появится выходная информация. Дело в том что объявление
C
1
char *
эквивалентно, точнее неявно транслируется компиляторами в
C
1
const char*
Читаем reference - "string literal"
Catstail
Модератор
 Аватар для Catstail
21502 / 10255 / 1670
Регистрация: 12.02.2012
Сообщений: 17,141
22.04.2012, 21:30     Перевернуть строку. В чем проблема? #8
Так о чем я и говорю... Я примерно это и написал в первом посте.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2012, 21:33     Перевернуть строку. В чем проблема?
Еще ссылки по теме:

Строковый тип. Перевернуть строку C++
Найти количество простых чисел в массиве. Перевернуть все нечетные строки матрицы. Перевернуть каждое четное слово в строке C++
C++ Ввести с клавиатуры строку символов. Перевернуть каждое четное слово в строке.

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

Или воспользуйтесь поиском по форуму:
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
22.04.2012, 21:33     Перевернуть строку. В чем проблема? #9
http://www.cplusplus.com/faq/sequenc...-and-pointers/
C
1
2
char* greeting     = NULL;            /* 'greeting' does not point to anything */
char* salutation   = "Hello world!";  /* 'salutation' addresses immutable memory */
Цитата Сообщение от www.cplusplus.com
The last example highlights one of the tricky things about C: whether or not you declare salutation to be a pointer to const data (which you should, by the way), the memory it addresses is something that you are forbidden to modify – that is, it is immutable. Bad things can happen if you try! Honest!
Yandex
Объявления
22.04.2012, 21:33     Перевернуть строку. В чем проблема?
Ответ Создать тему
Опции темы

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