Страницы

Поиск по вопросам

понедельник, 4 февраля 2019 г.

Замена символов в строке

У меня есть строка: "''Start''". После всех действий над ней, должно получиться: "Start". Т.е удаляются все символы ", а затем все пары символов '' заменяются на " Удаляю из нее все символы " result.erase(std::remove(result.begin(), result.end(), '"' ), result.end());
Затем нужно заменить все пары символов '' на " replace(result.begin(), result.end(), "\'\'", "\"");
Выдает ошибку следующую ошибку:
tools/data_parser.cpp: In function ‘int main(int, const char**)’: tools/data_parser.cpp:21:52: error: no matching function for call to ‘replace(std::__cxx11::basic_string::iterator, std::__cxx11::basic_string::iterator, const char [3], const char [2])’ replace(result.begin(), result.end(), "\'\'", "\""); ^ In file included from /usr/include/c++/5/algorithm:62:0, from tools/data_parser.cpp:7: /usr/include/c++/5/bits/stl_algo.h:4233:5: note: candidate: template void std::replace(_FIter, _FIter, const _Tp&, const _Tp&) replace(_ForwardIterator __first, _ForwardIterator __last, ^ /usr/include/c++/5/bits/stl_algo.h:4233:5: note: template argument deduction/substitution failed: tools/data_parser.cpp:21:52: note: deduced conflicting types for parameter ‘const _Tp’ (‘char [3]’ and ‘char [2]’) replace(result.begin(), result.end(), "\'\'", "\"");
Я так понимаю, что std::replace заменяет только один символ на другой. Как заменить пару символов? Компилирую так: g++-5 -std=c++11 cfg_parser.cpp -o cfg_parser


Ответ

Если я вас правильно понял, то вы можете выполнить задачу следующим образом
#include #include #include
int main() { std::string s( "\"''Start''\"" );
std::cout << '[' << s << ']' << std::endl;
s.erase( std::remove( s.begin(), s.end(), '"' ), s.end() );
for ( std::string::size_type n = 0; ( n = s.find( "''", n ) ) != std::string::npos; ++n ) { s.replace( n, 2, 1, '"' ); }
std::cout << '[' << s << ']' << std::endl; }
Программа имеем следующий вывод на консоль:
["''Start''"] ["Start"]

Комментариев нет:

Отправить комментарий