Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2011, 09:05   #1
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
Радость C# String reverse

Добрый день, подскажите пожалуйста почему в программе ошибки?
Требуется перевернуть строку.

Код:
int size = (int)(str.Length) / 2;
            char buf;
            for (int i = 0; i < size; i++) {
                buf = str[i];
                str[i] = str[str.Length-i];
                str[str.Length - i] = buf;

            }

Цитата:
Error 1 Property or indexer 'string.this[int]' cannot be assigned to -- it is read only c:\documents and settings\admin\мои документы\visual studio 2010\Projects\ConsoleApplication13\ ConsoleApplication13\Program.cs 26 17 ConsoleApplication13
Цитата:
Error 2 Property or indexer 'string.this[int]' cannot be assigned to -- it is read only c:\documents and settings\admin\мои документы\visual studio 2010\Projects\ConsoleApplication13\ ConsoleApplication13\Program.cs 27 17 ConsoleApplication13
sir.andrey вне форума Ответить с цитированием
Старый 23.10.2011, 09:45   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а не хотите сходить вот в эту тему:
Метод Revers для строк


а ошибка у Вас возникает потому что класс string допускает обращение к элементам строки ТОЛЬКО на чтение!
вот, например, ОТСЮДА взято:
Цитата:
В этом случае для строки
Код:
s[i] = '5';
будет выдано сообщение об ошибке:

Невозможно присвоить значение свойству или индексатору 'string.this[int]' -- доступ только для чтения (CS0200)

Решить проблему можно двумя путями: использовать методы класса String (для замены подойдёт метод Replace()) или отказаться от класса String и использовать класс StringBuilder, для которого допустимо изменение отдельных элементов строки (так же, как это делалось в массиве).

Последний раз редактировалось Serge_Bliznykov; 23.10.2011 в 09:57.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.10.2011, 10:03   #3
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
Радость

Ясно, спасибо!
sir.andrey вне форума Ответить с цитированием
Старый 23.10.2011, 10:08   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

кстати, вы при обращении к элементам строки не учитываете, что в C/C++/C# строки нумеруются ОТ НУЛЯ. а Length возвращает КОЛИЧЕСТВО символов. поэтому Вам надо ещё единичку отнимать.

вот, например, решение черезе StringBuilder
Код:
using System.Text;
.....
            string str = "burda";
            
            StringBuilder str2 = new StringBuilder(str);
            int size = (int)(str2.Length) / 2;
            char buf;
            for (int i = 0; i < size; i++) {
                buf = str2[i];
                str2[i] = str2[str2.Length-i-1];
                str2[str2.Length - i-1] = buf;
            }            
            str = str2.ToString();
            Console.WriteLine(str);
обратите внимание, там, где обращение шло через .Length добавлено минус 1
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Reverse engineering + round-trip engineering. UML. Eclipse. Jakethefish Общие вопросы по Java, Java SE, Kotlin 0 05.09.2011 20:44
string-char-wchar_t-char-string чето потерял magog7 Общие вопросы C/C++ 0 08.08.2011 20:21
reverse grimm_jow Общие вопросы C/C++ 3 27.01.2010 20:32
Как получить адрес String строки или преобразовать String madboy4ik Общие вопросы по Java, Java SE, Kotlin 6 15.01.2010 11:57