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

STL. Удаление крайних символов - C++

Восстановить пароль Регистрация
 
valval
1 / 1 / 0
Регистрация: 29.01.2014
Сообщений: 30
06.02.2014, 08:14     STL. Удаление крайних символов #1
Приветствую.
Нужно сделать функцию, который будет удалять крайние символы у строки.
C++
1
void remove_side_chars(std::string& str, std::string const& chrs);
Т.е: '##hello world!#####' в итоге превратился в 'hello word' (удалили крайние решетки)

Хочу посмотреть вариант максимально извращенный со STL.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
noname_club
 Аватар для noname_club
100 / 88 / 9
Регистрация: 01.05.2013
Сообщений: 563
06.02.2014, 11:49     STL. Удаление крайних символов #2
http://stackoverflow.com/questions/2...trim-stdstring

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
include <algorithm> 
#include <functional> 
#include <cctype>
#include <locale>
 
// trim from start
static inline std::string &ltrim(std::string &s) {
        s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun<int, int>(std::isspace))));
        return s;
}
 
// trim from end
static inline std::string &rtrim(std::string &s) {
        s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::ptr_fun<int, int>(std::isspace))).base(), s.end());
        return s;
}
 
// trim from both ends
static inline std::string &trim(std::string &s) {
        return ltrim(rtrim(s));
}
C++
1
2
3
4
5
6
7
8
9
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost::algorithm;
 
string str1(" hello world! ");
trim(str1);
 
// str1 is now "hello world!"
// Use trim_right() if only trailing whitespace is to be removed.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.02.2014, 12:00     STL. Удаление крайних символов #3
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
 
void remove_side_chars(std::string& str, std::string const& chrs)
{
    std::size_t b = str.find_first_not_of( chrs );
    
    if( b == std::string::npos )
    {
        str = "";
    }
    else
    {
        std::size_t e = str.find_last_not_of( chrs );   
        std::size_t len = e-b+1;
        str.assign( str, b, len );
    }
}
 
int main() {
    
    std::string s = "#!##hello##@###";
    
    remove_side_chars( s, "#@!" );
    
    std::cout << s << std::endl;
    
    return 0;
}
http://ideone.com/w6JGXa
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
06.02.2014, 12:22     STL. Удаление крайних символов #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include <boost/algorithm/string/trim.hpp>
 
int main()
{
   std::string s = "##hello world!#####";
 
   boost::algorithm::trim_left_if(s, boost::algorithm::is_any_of("#"));
   std::cout << s << "\n";
 
   boost::algorithm::trim_right_if(s, boost::algorithm::is_any_of("#"));
   std::cout << s << "\n";
 
   return 0;
}
Добавлено через 1 минуту
Или один раз:
C++
1
boost::algorithm::trim_if(s, boost::algorithm::is_any_of("#"));
Yandex
Объявления
06.02.2014, 12:22     STL. Удаление крайних символов
Ответ Создать тему
Опции темы

Текущее время: 16:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru