Giriş
Açıklaması şöyle.
Metod std::size_t tipini döner. Yani iterator değil indeks döner. Bu tip unsigned olduğu için dikkatli olmak gerekir. Açıklaması şöyle.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız
Find metodu split için şöyle kullanılır. İşlem sonunda string'in sonuna gelmediysek geri kalan karakterlerde sonuca dahil edilir.
Açıklaması şöyle.
O(n) bir algoritma yerine Rabi Karp kullanılabilir. Bu algoritma şöyledirReturn value
Position of the first character of the found substring or npos if no such substring is found.
1) Calculate hash of the substringDönüş Tipi
2) Take a sliding window [equals the size of substring] and compare the hash of the string present in the window to that of substring.
3) If hash matches then we compare window content with the substring.
Metod std::size_t tipini döner. Yani iterator değil indeks döner. Bu tip unsigned olduğu için dikkatli olmak gerekir. Açıklaması şöyle.
This is because std::string have two interfaces:std::string::npos şöyledir. Yani unsigned bir dönüş tipi için -1 dönülüyor.
- The general iterator based interface found on all containers
- The std::string specific index based interface
std::string::find is part of the index based interface, and therefore returns indices.
Use std::find to use the general iterator based interface.
static const size_type npos = -1;
Aslında dönüş tipi diğer STL veri yapılarından çok farklı. Örneğin std::map bir iterator döner. Şöyle yaparızstd::map<int, int> myMap = {{1, 2}};
auto it = myMap.find(10); // it == myMap.end()
String ise indeks döner. Şöyle yaparız.std::string myStr = "hello";
auto it = myStr.find('!'); // it == std::string::npos
1. size_t'ye atayarak kullanımŞöyle yaparız.
std::size_t position = str.find('.');
if (position !=
std::string::npos) {...}
Şu kullanım yanlıştır. Bu blok her zaman çalışır.if (str.find( ".." ) >= 0) {...}
Şu kullanım yanlıştır. Bu blok hiç bir zaman çalışmaz.if (str.find ('.') < 0) {...}
Şu kullanım çalışır ama bence kötüif (str.find('.') == -1) {...}
2. int'e atayarak kullanımŞöyle yaparız.
int position = str.find ("..");
if (position
>= 0) {...}
Örnek - find ile substrŞöyle yaparız
const std::string extracted = src.substr(src.find('d'));
Örnek - find ile splitFind metodu split için şöyle kullanılır. İşlem sonunda string'in sonuna gelmediysek geri kalan karakterlerde sonuca dahil edilir.
const string& str = ...;
std::vector<std::string> values;
size_t pos(0), tmp;
while ((tmp = str.find('.',pos)) != std::string::npos){
values.push_back(str.substr(pos,tmp-pos));
pos = tmp+1;
}
if (pos < str.length())
values.push_back(str.substr(pos));
Hiç yorum yok:
Yorum Gönder