Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/39: Рейтинг темы: голосов - 39, средняя оценка - 4.74
3 / 3 / 0
Регистрация: 27.11.2011
Сообщений: 11

Visual Studio 2010 - работа со строками

18.03.2012, 19:56. Показов 7738. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Нужно решить небольшую задачу, но пока у меня нет идей. Саму задачу можно сформулировать так: есть обычный текстовой файл с несколькими строками. Он имеет вид:

...
...#!Info!#...
...
Где "..." - некоторый текст. После считывания нужно найти текст #!Info!# и заменить его на свой. Каким образом мне это осуществить? Пока набросал только несколько строк для считывания их из файла:

C++
1
2
3
StreamReader ^sr = gcnew StreamReader("mytext.txt");
String ^str = sr->ReadToEnd();
delete sr;
Сложность возникла потому, что только недавно начал изучать данную область и не умею работать с System::String ^. Заранее благодарен за помощь!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.03.2012, 19:56
Ответы с готовыми решениями:

Подключение и работа с базой данных MS Access 2010 в Visual Studio 2010: VB
Доброго времени суток! Уважаемые гуру програмирования, не моглибы Вы помочь начинающему! Задача: Есть база данный на Access 2010,...

Ошибки в работе Visual Studio 2010 при создании проекта: прекращена работа программы
Когда создаю любой проект в С# то у меня сначала открывает окно с сообщением о завершении работы программы visual studio 2010...

Проект C# Visual Studio 2010 перевести в Visual Studio 2005
Подскажите как проект создан в C# Visual Studio 2010 перевести в версию Visual Studio 2005, пожалуйста..

10
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
19.03.2012, 00:15
Mетод класса String^ Replace(String^ , String^) должен помочь
Хорошо если ваш "mytext.txt" в кодировке Unicode.
Цитата Сообщение от Alexance Посмотреть сообщение
String ^str = sr->ReadToEnd();
C++
1
2
String^ rightStr=L"Вот как должно быть";
String^ newStr=str->Replace(L"#!Info!#", rightStr);
1
3 / 3 / 0
Регистрация: 27.11.2011
Сообщений: 11
28.03.2012, 18:06  [ТС]
Прошу еще помощи по одному вопросу: сейчас работаю со строкой System::String^ и возникла необходимость обработки ее через функцию. Возможно, задача совсем простая, но я не смог найти решения. Как я понимаю, я должен каким-то образом передать адрес строки в качестве аргумента функции, однако я не знаю, как это сделать.

Сложность возникает по такой причине: после того, как я передаю строку, функция по своему выполнению должна уже будет вернуть три строки (одна обработанная строка, которую нужно присвоить строке, передававшейся в качестве параметра функции, и две новых). Мне кажется, самым простым решением будет передача адреса, где находятся строки (все они задаются не в вызываемой функции, а, допустим, в головной). Каким образом мне это реализовать?
0
162 / 162 / 42
Регистрация: 29.05.2010
Сообщений: 435
28.03.2012, 20:51
System::String ^ это ссылочный тип, то есть, если Вы передаете в функцию переменную типа String^, Вы передаете ссылку.
0
3 / 3 / 0
Регистрация: 27.11.2011
Сообщений: 11
29.03.2012, 00:03  [ТС]
Цитата Сообщение от AnDrew_LP Посмотреть сообщение
System::String ^ это ссылочный тип, то есть, если Вы передаете в функцию переменную типа String^, Вы передаете ссылку.
Хорошо, но, например, функция:

C++
1
2
3
4
void ProcessData(System::String^ str)
{
    str = str->Replace("test", "result");
}
не изменяет строки, которая подается в качестве аргумента. Возможно, я делаю что-то не так, поэтому, пожалуйста, подскажите, как нужно правильно это реализовать!
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
29.03.2012, 00:48
Цитата Сообщение от Alexance Посмотреть сообщение
void ProcessData(System::String^ str) { str = str->Replace("test", "result"); }
Можно так:
C++
1
2
3
4
System::String^ ProcessData(System::String^ str) {
str = str->Replace("test", "result");
return str;
 }
Если хотите процедуру (void) что бы изменить несколько строк, эти строки должны быть видны из функции. И не нужно скрывать их имена именами её формальных параметров.
1
3 / 3 / 0
Регистрация: 27.11.2011
Сообщений: 11
29.03.2012, 20:01  [ТС]
Спасибо за совет, однако приведу код более подробно:

Сама функция:

C++
1
2
3
4
System::String^ ProcessData(System::String^ str) {
str = str->Replace("test", "result");
return str;
}
Головная функция, из которой вызывается вышеописанная:

C++
1
2
3
4
private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
System::String^ myString = "Small test";
ProcessData(myString);
}
Само значение myString не меняется, что логично. А в моей ситуации необходимо изменить само значение myString (хочется обойти присваивание вида myString = ProcessData(myString). В целом, задачу я решил немного другим способом, но мне все же хочется узнать, как изменить значение строки без присваивания, ведь функция возвращает указатель на новый экземпляр строки?
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
29.03.2012, 20:29
Цитата Сообщение от Alexance Посмотреть сообщение
ProcessData(myString);
Дык это ж уже строка, - сохраните её хоть на память
String^ resultStr=ProcessData(myString);
В строке resultStr результат.
1
Эксперт С++
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
29.03.2012, 20:38
Alexance, можно попробовать воспользоваться отслеживаемыми ссылками, которые обозначаются как "%". То же самое, что и передача параметров по ссылке через "&" в C++, только тут управляемый вариант.
C++
1
2
3
4
void ProcessData(String ^% str)
    {
    str = str->Replace("test", "result");
    }
Добавлено через 1 минуту
хорошие объяснения по этому поводу можно найти здесь http://stackoverflow.com/quest... e-in-c-cli.
1
3 / 3 / 0
Регистрация: 27.11.2011
Сообщений: 11
29.03.2012, 20:45  [ТС]
Огромное спасибо за помощь! Все работает именно так, как хотелось.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
29.03.2012, 21:00
Цитата Сообщение от Alexance Посмотреть сообщение
обойти присваивание вида myString = ProcessData(myString)
Извините, этого не вычитал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.03.2012, 21:00
Помогаю со студенческими работами здесь

Открыть проект Visual Studio 2015 в Visual Studio 2010
Здравствуйте не могу открыть проект созданный в Visual Studio 2015 в Visual Studio 2010.

Даунгрейд до Visual Studio 2010 с Visual Studio 2015
В общем, вопрос не особо связан с кодом. Собрал я свой проект в VS 2015 Enterprise, залил на Git и вспомнил, что мне нужна совместимость...

Плагин 3Dmax SDK 2010 для Visual Studio 2010
Не подскажите как ставится плагин 3Dmax SDK 2010 для Visual Studio 2010 Autodesk 3ds Max Design 2010 с поддержкой C++?

Visual Studio 2008/Visual Studio 2010
Здравствуйте, уважаемые форумчане, у меня возник вопрос относительно двух версий Visual Studio. Какое-то время назад я начал...

MS Visual Studio 2013 VS Visual Studio 2010
В 2010-й версии был шаблон С++ - Windows Forms Application, в 13-й версии нету такого, есть только MFC. Есть ли возможность вернуть?


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru