2016-09-04 4 views
-4

Я новичок в программировании на C++. Мне нужна помощь,C++ Как извлечь подстроку между двумя одинаковыми символами

У меня есть строка: ---- Входной сигнал: «Имя: $$ Введите Ваш Имя2 $$» Я хочу, чтобы извлечь строки между символами $$ включая символы: ---- Выходной : «$$ Введите ваше имя2 $$»

Пожалуйста, помогите мне.

+1

Добро пожаловать в StackOverflow. Не могли бы вы показать код, который у вас уже есть, и объяснить, в чем именно проблема, которую вы еще не можете решить в этом коде. – Christophe

+2

[Стандартная библиотека регулярных выражений] (http://en.cppreference.com/w/cpp/regex) может быть полезна. –

ответ

-1

Regular Expression очень полезны в этом случае.

C++ 11 имеет regex библиотека.

#include <string> 
#include <regex> 

std::string parse_string(const std::string& str) { 
    static const std::string REGEX_STR = R"__(\$\$(\w|\W)*\$\$)__"; 
    std::regex regex(REGEX_STR); 
    std::smatch regex_iterator; 
    if (std::regex_search(str, regex_iterator, regex)) { 
    return regex_iterator.str(); 
    } 
    return std::string(""); 
} 

Код может быть улучшен, но он должен служить хорошей отправной точкой. Особый случай должен быть обработан, например: более $$*$$ в строке, и т.д. ...


Примечание:
R"__(\$\$(\w|\W)*\$\$)__"; это для того, чтобы сделать более удобным для чтения регулярное выражение raw string.

-1

Просто найдите строку для разделителей:

std::string parse_string(const std::string& str, const std::string& delim) { 
    auto start = str.find(delim); 
    if (start == std::string::npos) 
     return ""; 
    auto end = str.find(delim, start + delim.size()); 
    if (end == std::string::npos) 
     return str.substr(start); 
    else 
     return str.substr(start, end - start + delim.size); 
} 
Смежные вопросы