Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 31
1

Вырезать символ из строки, регулярное выражение

13.09.2015, 11:50. Показов 1791. Ответов 13
Метки нет (Все метки)

Подскажите пожалуйста как из строки

std::string s = "string\.txt";

вырезать сиивол "\"
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.09.2015, 11:50
Ответы с готовыми решениями:

Регулярное выражение: вырезать текст из ссылки
Здравствуйте. Не могу разобраться с регулярными выражениями... Пример: $text = '<a...

Не работает регулярное выражение (вырезать div)
Встала такая задача. По AJAX получается html-страница, в ней есть подобный код: <div...

Регулярное выражение: вырезать все ссылки в тексте
Здравствуйте. Не могу разобраться с регулярными выражениями... Есть текст: Какой-то текст <a...

Регулярное выражение вырезать из url иденификатор фесбука
подскажите регулярное выражение для функции str_replace () нужно вырезать из url идентификатор...

13
6968 / 6013 / 2731
Регистрация: 14.04.2014
Сообщений: 25,734
13.09.2015, 15:13 2
Была же уже тема с точкой. Только шаблон заменить.
C++
1
2
    std::string s = "test stri\\.ng";
    std::cout << std::regex_replace(s, std::regex("\\\\"), "");
0
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 31
14.09.2015, 08:16  [ТС] 3
У меня не компилится данный код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <cstdlib>
#include <cstring>
#include <string>
#include <iostream>
#include <regex>
 
 
 
int main() {
  std::string s = "test stri.ng";
    std::cout << std::regex_replace(s, std::regex("t"), "");
    
}
ошыбка при компиляции

g++ c_/test_.cpp
In file included from /usr/include/c++/4.8/regex:35:0,
from c_/test_.cpp:6:
/usr/include/c++/4.8/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
#error This file requires compiler and library support for the \
^
c_/test_.cpp: In function ‘int main()’:
c_/test_.cpp:12:5: error: ‘cout’ is not a member of ‘std’
std::cout << std::regex_replace(s, std::regex("t"), "");
^
c_/test_.cpp:12:18: error: ‘regex_replace’ is not a member of ‘std’
std::cout << std::regex_replace(s, std::regex("t"), "");
^
c_/test_.cpp:12:40: error: ‘regex’ is not a member of ‘std’
std::cout << std::regex_replace(s, std::regex("t"), "");
0
2712 / 1879 / 556
Регистрация: 05.06.2014
Сообщений: 5,468
14.09.2015, 11:59 4
Цитата Сообщение от c_kuzma Посмотреть сообщение
ошыбка при компиляции
Написано же - поддержку C++11 включить надо.
0
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 31
14.09.2015, 15:20  [ТС] 5
Сделал по другому

std::string s = "string\\.txt";
s.replace(s.find("\\."),3,".");
std::cout<<s;

Работает, вырезает,
но теперь другая проблема, если в переменной s другое значение,
БЕЗ "\\." то вылазит ошибка во время выполнения скрипта.

./a.out
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::replace
Аварийный останов (сделан дамп памяти)

не могу придумать как обойти это.
Подскажите пожалуйста.
0
6968 / 6013 / 2731
Регистрация: 14.04.2014
Сообщений: 25,734
14.09.2015, 16:09 6
C++
1
2
std::string s = "string\\.txt";
s.erase(s.find("\\"), 1);
0
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 31
14.09.2015, 16:41  [ТС] 7
тоже самое
я думаю тут нужно чт ото типа такого

std::string s = "string\\.txt";
if(s.find("\\.")){
s.replace(s.find("\\."),3,".");
}
std::cout<<s;
0
6968 / 6013 / 2731
Регистрация: 14.04.2014
Сообщений: 25,734
14.09.2015, 16:45 8
Ты объясни, откуда у тебя 3, если там 2 символа.
0
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 31
14.09.2015, 16:48  [ТС] 9
да согласен 2
но дело не в этом,
какое условие нужно написать, чтобы не срабатывало если нет искомых символов в строке.
0
6968 / 6013 / 2731
Регистрация: 14.04.2014
Сообщений: 25,734
14.09.2015, 16:51 10
C++
1
2
3
std::string s = "string\\.txt";
size_t p;
if ((p = s.find("\\")) != std::string::npos) s.erase(p, 1);
0
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 31
14.09.2015, 17:00  [ТС] 11
Спасибо ратает!!!
я правда переделал немного

std::string s = "string\\.txt";

size_t p;
if ((p = s.find("\\.")) != std::string::npos){
s.replace(p,2,".");
//s.erase(p, 1);
}
std::cout<<s;
0
6968 / 6013 / 2731
Регистрация: 14.04.2014
Сообщений: 25,734
14.09.2015, 17:18 12
Для чего? Это лишняя операция.
0
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 31
14.09.2015, 17:25  [ТС] 13
Я использую эту функцию также для замены символа

Добавлено через 1 минуту
Есть еще одна проблема

если в
std::string s = "string\\.txt";

несколько точек, то вырезает или заменяут только первую точку.
А нужно, чтобы заменял все.

Добавлено через 1 минуту
тоесть
std::string s = "str\\.ing\\.txt";

должно вырезать в 2-х местах
0
6968 / 6013 / 2731
Регистрация: 14.04.2014
Сообщений: 25,734
14.09.2015, 18:13 14
regex_replace() используй, там все удалятся, а здесь только цикл.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.09.2015, 18:13

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Регулярное выражение: из текста вырезать все слова, содержащие только буквы
Нужно из текста вырезать все слова, содержащие только буквы. Не получается вырезать из текста...

Регулярное выражение: исключить символ
Есть строка $28'405 С помощью регулярного выражения мне нужно достать число. Вот моя регулярка...

Регулярное выражение игнорирует спец символ \n
Имеется: Регулярное выражение- /G00 Z+.{6}\nG00 X+.{6} Y+.{6}\n+G01 Z+.{6} F+.??\(Penetrate\)/g ...

Скобка как символ, а не регулярное выражение
Всем доброго времени суток! Пытаюсь выполнить замену подстроки в строке, но не выходит String a =...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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