Giriş
Tüm algoritmalar için şu satırı dahil ederiz.
Elimizde şöyle bir liste olsun
Şöyle yaparız.
Şöyle yaparız.
Açıklaması şöyle. String exception-safety eğer exception fırlatılırsa, hiçbir değişiklik olmamış anlamına gelir.
Şu satırı dahil ederiz.
Şu satırı dahil ederiz.
Arka arkaya gelen "" karakterlerini tek bir " karakteri ile değiştirmek için şöyle yaparız.
Şöyle yaparız.
Örnek
Yeni bir string döner. Şöyle yaparız.
Ayraç olarak belirtilen karakterleri kullanır.
Örnek - boost::is_any_of
Şöyle yaparız.
Şöyle yaparız.
Backslah ve t'ye göre ayırma yapmak ve token'ları almamak için şöyle yaparız. .
Ayraçları da almak istersek şöyle yaparız.
Açıklaması şöyle
Ayraç olarak "/" karakterini kullanmak için şöyle yaparız.
Bu metod sadece byte'lar ile çalışır. utf-8 ile çalışmaz. Açıklaması şöyle
Şöyle yaparız.
Şöyle yaparız.
Tüm algoritmalar için şu satırı dahil ederiz.
#include <boost/algorithm/string.hpp>
icontains metodu - ignore caseElimizde şöyle bir liste olsun
std::list<std::wstring> seeds{ L"google", L"yahoo", L"stackoverflow"};
Bir kelimenin listede olup olmadığını kontrol etmek için şöyle yaparız.std::wstring testedStr;
for (auto & seed : seeds)
{
if (boost::icontains(testedStr, seed))
{
return true;
}
}
return false;
iequals metodu - ignore case - string + stringŞöyle yaparız.
std::string a,b = ...;
bool result = boost::iequals (a,b);
iequals metodu - ignore case - string + string + locale Şöyle yaparız.
std::u16string str1 = ...;
std::u16string str2 = ...;
// Create the locale
boost::locale::generator gen;
std::locale loc = gen("");
// Try to compare
if (boost::iequals(str1, str2, loc)) {
std::cout << "EQUAL\n";
} else {
std::cout << "!EQUAL\n";
}
ifind_first metoduAçıklaması şöyle. String exception-safety eğer exception fırlatılırsa, hiçbir değişiklik olmamış anlamına gelir.
Şöyle yaparız.This function provides the strong exception-safety guarantee
typedef const boost::iterator_range<std::string::const_iterator> StringRange;
std::string str1("Hello world");
std::string str2("hello");
if ( boost::ifind_first(
StringRange(str1.begin(), str1.end()),
StringRange(str2.begin(), str2.end()) ) ) {
std::cout << "Found!" << std::endl;
}
join metoduŞu satırı dahil ederiz.
#include <boost/algorithm/string/join.hpp>
STL veri yapısı ile çalışır. Şöyle yaparız.std::vector<std::string> list;
std::string joined = boost::algorithm::join (list, ", ");
Range ile çalışır. Şöyle yaparız.std::string get_keys(const std::map<std::string, std::string>& map) {
return boost::algorithm::join(
map | boost::adaptors::map_keys,
", ");
}
replace_all metoduŞu satırı dahil ederiz.
#include <boost/algorithm/string/replace.hpp>
ÖrnekArka arkaya gelen "" karakterlerini tek bir " karakteri ile değiştirmek için şöyle yaparız.
std::string msg("\"Date\"\":1481200838,\"\"Message\"\":\"");
boost::replace_all(msg, "\"\"", "\"");
std::cout << msg << std::endl;
ÖrnekŞöyle yaparız.
boost::replace_all(line, "abc", "hij");
replace_all_copy metodu - input + substitude + search stringÖrnek
Yeni bir string döner. Şöyle yaparız.
line = boost::replace_all_copy (line
,"d","c");
split metoduAyraç olarak belirtilen karakterleri kullanır.
Örnek - boost::is_any_of
Şöyle yaparız.
std::vector<std::string> result;
boost::split(result, "string to split", boost::is_any_of("\t "));
Örnek - boost::is_any_ofŞöyle yaparız.
std::string str = "91,43,3,23,0;6,9,0-4,29,24";
std::string delimiters("|,:-;");
std::vector<std::string> result;
boost::split(result, str, boost::is_any_of(delimiters));
Örnek - boost::is_any_ofBackslah ve t'ye göre ayırma yapmak ve token'ları almamak için şöyle yaparız. .
std::string s(r("\tthis\tis\ta\ttest");
boost::algorithm::split(strs, s, boost::is_any_of("\\t");
Çıktı olarak şunu alırız.his
is
a
es
Örnek - boost::is_any_of + token_compress_offAyraçları da almak istersek şöyle yaparız.
std::vector<std::string> results;
std::string str = "...";
boost::split(
result,
str,
boost::is_any_of("abc"),
boost::token_compress_off
);
Örnek - boost::is_any_of + token_compress_onAçıklaması şöyle
Compression compresses adjacent delimiters, it does not avoid empty tokens.Ayraçları almak istemezsek şöyle yaparız.
std::vector<std::string> result;
boost::split(result, "...", boost::is_any_of(","), boost::algorithm::token_compress_on);
Örnek - lambdaAyraç olarak "/" karakterini kullanmak için şöyle yaparız.
char* str = ...;
std::vector<std::string> v;
boost::split(v, str, [](char c){return c == '/';});
split ve utf-8Bu metod sadece byte'lar ile çalışır. utf-8 ile çalışmaz. Açıklaması şöyle
Boost split thinks treats the strings as std::strings: sequences of char: roughly "bytes" (or code units in UTF-8, I believe).Elimizde çince metin olsun.Bunu düzgün ayıramaz.
However, many of the code points in the source/pattern are multi-byte characters,
std::string src = "使用boost split失败了,不知道什么原因。有人可以告诉我吗?谢谢!";
boost::split(results, src, boost::is_any_of(",.,。"));
to_uppper metoduŞöyle yaparız.
std::string str (" hello world! ");
boost::to_upper (str);
trim_right metoduŞöyle yaparız.
std::string str ("hello world! ");
boost::trim_right (str);
Hiç yorum yok:
Yorum Gönder