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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Excogit8er
2 / 2 / 0
Регистрация: 23.10.2012
Сообщений: 66
#1

Замена одного обратного слеша на 2 в строке текста (string) - C++

12.02.2013, 19:03. Просмотров 1422. Ответов 4
Метки нет (Все метки)

Привет всем.

Есть такое задание - заменить один слеш на 2 )

Например: C:\Program Files\Common Files\Adobe AIR\Versions\1.0
Хочу, чтобы было так: C:\\Program Files\\Common Files\\Adobe AIR\\Versions\\1.0

Сделал так вот:

C++
1
2
3
4
5
std::str = "C:\Program Files\Common Files\Adobe AIR\Versions\1.0";      
std::string slash = "\\";
  for (std::string::size_type n = str2.find("\\"); n != std::string::npos; n = str2.find("\\")) {
        str2.insert(n,slash);       
    }
Потом понимаю, что
C++
1
n = str2.find("\\"))
ищет заново с начала строки.
А как правильно тогда?


ЗЫ Понимаю, как это сделать при помощи boost::regex_replace
Но это какое-то кривое решение задачи)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2013, 19:03     Замена одного обратного слеша на 2 в строке текста (string)
Посмотрите здесь:
Замена одного символа на другой в строке C++
C++ Замена одного слова в строке на другое
C++ Замена одного слова на другое в строке типа char
C++ Замена текста в строке
Почему вместо обратного слеша "\" выводит "¥" C++
C++ Шифрование текста, табличная замена текста
C++ Замена слов в string
Замена всех string на char* C++
Замена символов на пробелы в string C++
Замена одного слова на другое C++
C++ Замена одного слова на другое
Замена одного символа на другой C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
12.02.2013, 19:10     Замена одного обратного слеша на 2 в строке текста (string) #2
Вторым параметром find может принимать позицию, с которой начинать поиск.
Excogit8er
2 / 2 / 0
Регистрация: 23.10.2012
Сообщений: 66
12.02.2013, 19:52  [ТС]     Замена одного обратного слеша на 2 в строке текста (string) #3
Цитата Сообщение от Vourhey Посмотреть сообщение
Вторым параметром find может принимать позицию, с которой начинать поиск.
Да, спасибо, упустил этот момент. Сделал так вот:

C++
1
2
3
4
5
6
std::string slash = "\\";
    for (std::string::size_type n = str2.find('\\'); (n != std::string::npos) && (n < str2.length()); str2.find('\\', n)) {
        str2.insert(n, slash);
        while (str2.at(n) == '\\')
         n++;
    }
igor001
8 / 3 / 1
Регистрация: 12.02.2013
Сообщений: 68
13.02.2013, 11:56     Замена одного обратного слеша на 2 в строке текста (string) #4
не мучайся, юзай так:
C++
1
StringReplace(my_string, "\", "\\", TReplaceFlags()<<rfReplaceAll);
ф-ция из библиотеки STL в строке my_string заменит "\" на "\\" (TReplaceFlags()<<rfReplaceAll означает замену всех "\" на "\\")
Excogit8er
2 / 2 / 0
Регистрация: 23.10.2012
Сообщений: 66
13.02.2013, 16:34  [ТС]     Замена одного обратного слеша на 2 в строке текста (string) #5
Цитата Сообщение от igor001 Посмотреть сообщение
не мучайся, юзай так:
C++
1
StringReplace(my_string, "\", "\\", TReplaceFlags()<<rfReplaceAll);
ф-ция из библиотеки STL в строке my_string заменит "\" на "\\" (TReplaceFlags()<<rfReplaceAll означает замену всех "\" на "\\")
Thanx, но как оказалось, это вообще не нужно - замена нужна, только если в самом файле объявляешь переменную, из серии:
C++
1
2
std::string path2file = "C:\\Program Files\\MyFolder";
ifstream ips (path2file, std::ios_base::in);
А если строка считывается из файла, а потом присваевается переменной типа string - то и с одним слешем все норм)

А вот это вот:
C++
1
StringReplace(my_string, "\", "\\", TReplaceFlags()<<rfReplaceAll);
мне бы вряд ли пригодилось, у меня консольное приложение, которое считывает путь к каталогу из текстового файла. StringReplace - это, похоже, какой-то метод класса CString, или что-то такое из MFC.

Добавлено через 45 минут
PS Посмотрел StringReplace функцию - это, по ходу, борландовская какая-то фишка.
Yandex
Объявления
13.02.2013, 16:34     Замена одного обратного слеша на 2 в строке текста (string)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru