//1.string<<
stringstream ss;
ss.clear();
ss.str("");
ss << st.year <<st.month<<st.day; //int 2015 int 1 int 8
string strDate;
ss >> strDate; //strDate:201518
int iTimeId = st.hour*12 + st.minute/5ios
//2.位數
CString szTimeId;
szTimeId.Format("%d", 1000 + iTimeId);
string strTimeId(szTimeId.Right(3).GetBuffer()); //保證取到的是3位數c++
//3. find
STL的find,find_if函數提供了一種對數組、STL容器進行查找的方法。使用該函數,需 #include <algorithm>
咱們查找一個list中的數據,一般用find(),例如:數組
using namespace std;
int main()
{
list<int> lst;
lst.push_back(10);
lst.push_back(20);
lst.push_back(30);
list<int>::iterator it = find(lst.begin(), lst.end(), 10); // 查找list中是否有元素「10」
if (it != lst.end()) // 找到了
{
// do something
}
else // 沒找到
{
// do something
}
return 0;
}函數
那麼,若是容器裏的元素是一個類呢?例如,有list<CPerson> ,其中CPerson類定義以下:spa
class CPerson
{
public:
CPerson(void);
~CPerson(void);指針
public:
int age; // 年齡
};orm
那麼如何用find()函數進行查找呢?這時,咱們須要提供一個判斷兩個CPerson對象「相等」的定義,find()函數才能從一個list中找到與指定的CPerson「相等」的元素。
這個「相等」的定義,是經過重載「==」操做符實現的,咱們在CPerson類中添加一個方法,定義爲:
bool operator==(const CPerson &rhs) const;
實現爲:
bool CPerson::operator==(const CPerson &rhs) const
{
return (id == rhs.age);
}對象
而後咱們就能夠這樣查找(假設list中已經有了若干CPerson對象)了:
list<CPerson> lst;
//////////////////////////////////
// 向lst中添加元素,此處省略
//////////////////////////////////
CPerson cp_to_find; // 要查找的對象
cp_to_find.age = 50;
list<CPerson>::iterator it = find(list.begin(), list.end(), cp_to_find); // 查找索引
if (it != lst.end()) // 找到了
{
// do something
}
else // 沒找到
{
// do something
}
這樣就實現了需求。ci
有人說,若是我有本身定義的「相等」呢?例如,有一個list<CPerson*>,這個list中的每個元素都是一個對象的指針,咱們要在這個list中查找具備指定age的元素,找到的話就獲得對象的指針。
這時候,你再也不能像上面的例子那樣作,咱們須要用到find_if函數,並本身指定predicate function(即find_if函數的第三個參數,請查閱STL手冊)。先看看find_if函數的定義:
template<class InputIterator, class Predicate>
InputIterator find_if(InputIterator _First, InputIterator _Last, Predicate _Pred);
Parameters
_First
An input iterator addressing the position of the first element in the range to be searched.
_Last
An input iterator addressing the position one past the final element in the range to be searched.
_Pred
User-defined predicate function object that defines the condition to be satisfied by the element being searched for. A predicate takes single argument and returns true or false.
咱們在CPerson類外部定義這樣一個結構體:
typedef struct finder_t
{
finder_t(int n) : age(n) { } bool operator()(CPerson *p) { return (age == p->age); } int age;
}finder_t;
而後就能夠利用find_if函數來查找了:
list<CPerson*> lst;
//////////////////////////////////
// 向lst中添加元素,此處省略
//////////////////////////////////
list<CPerson*>::iterator it = find_if(lst.begin(), lst.end(), finder_t(50)); // 查找年齡爲50的人
if (it != lst.end()) // 找到了
{
cout << "Found person with age : " << (*it)->age;
}
else // 沒找到
{
// do something
}
// 4.string.find()
#include <string>
#include <iostream>
using namespace std;
void main()
{
[cpp] view plaincopyprint?
////find函數返回類型 size_type
string s("1a2b3c4d5e6f7g8h9i1a2b3c4d5e6f7g8ha9i");
string flag;
string::size_type position;
//find 函數 返回jk 在s 中的下標位置
position = s.find("jk");
if (position != s.npos) //若是沒找到,返回一個特別的標誌c++中用npos表示,我這裏npos取值是4294967295,
{
cout << "position is : " << position << endl;
}
else
{
cout << "Not found the flag" + flag;
}
[cpp]
1. //find 函數 返回flag 中任意字符 在s 中第一次出現的下標位置
2. flag = "c";
3. position = s.find_first_of(flag);
4. cout << "s.find_first_of(flag) is : " << position << endl;
[cpp]
1. //從字符串s 下標5開始,查找字符串b ,返回b 在s 中的下標
2. position=s.find("b",5);
3. cout<<"s.find(b,5) is : "<<position<<endl;
[cpp]
1. //查找s 中flag 出現的全部位置。
2. flag="a";
3. position=0;
4. int i=1;
5. while((position=s.find_first_of(flag,position))!=string::npos)
6. {
7. //position=s.find_first_of(flag,position);
8. cout<<"position "<<i<<" : "<<position<<endl;
9. position++;
10. i++;
11. }
[cpp]
1. //查找flag 中與s 第一個不匹配的位置
2. flag="acb12389efgxyz789";
3. position=flag.find_first_not_of (s);
4. cout<<"flag.find_first_not_of (s) :"<<position<<endl;
[cpp]
1. //反向查找,flag 在s 中最後出現的位置
2. flag="3";
3. position=s.rfind (flag);
4. cout<<"s.rfind (flag) :"<<position<<endl;
5. }
說明:1. 若是string sub = 」abc「; string s = 」cdeabcigld「; s.find(sub) , s.rfind(sub) 這兩個函數,若是徹底匹配,才返回匹配的索引,即:當s中含有abc三個連續的字母時,才返回當前索引。 s.find_first_of(sub), s.find_first_not_of(sub), s.find_last_of(sub), s.find_last_not_of(sub) 這四個函數,查找s中含有sub中任意字母的索引。2. 若是沒有查詢到,則返回string::npos,這是一個很大的數,其值不須要知道