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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2012, 02:19   #1
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию String

Доброго времени суток!
Начал изучать C# и столкнулся с такой проблемой..
Как мне изменить третий элемент строки ?

Код:
string s = "stroka";
s[2]='a'; // так не работает
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 27.09.2012, 02:54   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от asmars Посмотреть сообщение
Доброго времени суток!
Начал изучать C# и столкнулся с такой проблемой..
Как мне изменить третий элемент строки ?

Код:
string s = "stroka";
s[2]='a'; // так не работает
Код:
s = "straka";
BOBAH13 вне форума Ответить с цитированием
Старый 27.09.2012, 02:54   #3
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Насколько я знаю, строки в C# неизменяемы, потому для подобных штучек следует использовать массивы символов (char[]).
Код:
    string s = "hello, world!";
    char[] b = s.ToCharArray();
 
    b[5] = '?';
 
    Console.WriteLine(new string(b));
Что-то вроде такого, не очень разбираюсь в этом языке.
netrino вне форума Ответить с цитированием
Старый 27.09.2012, 06:39   #4
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Цитата:
Насколько я знаю, строки в C# неизменяемы
Да, так и есть. Изменить какой-либо элемент в строке можно двумя способами:
1. Создать новую строку.
2. Работать в unsafe режиме и обращаться нагло по адресу (жутко муторно и совершенно не нужно).

Код:
string s = "hello, world!";
    char[] b = s.ToCharArray();
 
    b[5] = '?';
 
    Console.WriteLine(new string(b));
Работать должно, но делать так нельзя. Нельзя изменять массив b, т.к. при это поведение строки a становится неопределнным. А это не есть гуд.
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 27.09.2012, 07:32   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
строки в C# неизменяемы
А почему, если не секрет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.09.2012, 07:42   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
А почему, если не секрет?
Потому что медленно. Для работы с содержимым строки используется класс StringBuilder - специально оптимизированный для изменения кишков строки. Но его функционал ограничен.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 27.09.2012, 18:41   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от MooNDeaR Посмотреть сообщение
Да, так и есть. Изменить какой-либо элемент в строке можно двумя способами:
1. Создать новую строку.
2. Работать в unsafe режиме и обращаться нагло по адресу (жутко муторно и совершенно не нужно).

Код:
string s = "hello, world!";
    char[] b = s.ToCharArray();
 
    b[5] = '?';
 
    Console.WriteLine(new string(b));
Работать должно, но делать так нельзя. Нельзя изменять массив b, т.к. при это поведение строки a становится неопределнным. А это не есть гуд.
Если под строкой a Вы имели ввиду s, то почему неопределённым? Разве String.ToCharArray() не создаёт копию строки?
Stilet, есть алгоритмы, которые работают быстрее на неизменяемых данных, например разбиение строки, или выделение подстроки
Код:
// java
String s = "hello, world!";
s.split(' '); // ["hello,", "world!"] - при этом не выделяется память для хранения символов "hello," и "world!", 
// просто создаётся два объекта класса String, указывающие на соответствующие позиции в s
s.substring(3, 10); // Опять же создаёт String, указывающий на 4-й элемент строки s и имеющий длину 7
netrino вне форума Ответить с цитированием
Старый 28.09.2012, 02:12   #8
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Вот решение..

Код:
            string slovo = Console.ReadLine();
            string pslovo = new String('*', slovo.Length);
            Console.WriteLine(pslovo);

            char[] s = pslovo.ToCharArray();
            s[2] = 'A';
            pslovo = s.ToString();
            Console.WriteLine(s);

            Console.ReadKey();
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 28.09.2012, 08:27   #9
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Мелкософт вроде как для этих целей рекомендует StringBuilder. Вот здесь вкратце: http://professorweb.ru/my/csharp/cha...level4/4_8.php
Цитата:
Вот решение..
Частного случая. В случае активных операций со строкой, как и в случае большого объема символов в строке быстрей будет StringBuilder. Даже исключение (или добавление) символа в середине массива символов заставит программиста опускаться в дебри реализации, а это опять же источник ошибок.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 28.09.2012 в 08:44.
Utkin вне форума Ответить с цитированием
Старый 28.09.2012, 16:26   #10
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

Utkin, Да вы правы
Код:
           var str = "test";
            StringBuilder sb = new StringBuilder(str);
            sb[1] = 'i';
            str = sb.ToString();
Reskov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
string-char-wchar_t-char-string чето потерял magog7 Общие вопросы C/C++ 0 08.08.2011 20:21
C++ <string.h> sir.andrey Помощь студентам 14 10.07.2011 10:23
string c+ gubi6ka Помощь студентам 2 23.02.2011 14:03
String большого размера, более 255 String[255] bitSoft Общие вопросы Delphi 9 28.03.2010 19:45
Как получить адрес String строки или преобразовать String madboy4ik Общие вопросы по Java, Java SE, Kotlin 6 15.01.2010 11:57