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

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

18.03.2012, 19:56. Показов 7761. Ответов 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
9007 / 4708 / 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
9007 / 4708 / 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
9007 / 4708 / 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
9007 / 4708 / 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
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru