string很有艺术的STL,有时候给定的数据用字符串处理会有很优雅,很简洁
善于运用atoi将字符串转换为整形;
//insert可根据下标或者迭代器插入
//find('char')返回的第一次出现时的下标.rfind()最后一次
//erase可以根据下标或者迭代器,erase(3,7)删除从下标3-7元素
//erase(2)删除从下标2到最后一个元素
// string.find_first_of() string.find_first_not_of
//找不到返回string::npos;
cin.get()吃掉第一个字符,返回值是其ASCII码;
getline(cin,string,'结尾符')第三个参数可以缺省,默认是空格结束。并且不读取结尾符;可以读取一行字符串(包括空格)
在刷一道翻转链表的题目中,遇到了
void reverse(){ //loop取整数部分
int loop=validn/k,i;
for(i=0;i<loop;++i)
reverse(addrseq+i*k,addrseq+(i+1)*k);
}
boy还在纠结为什么reverse定义明明是无参,为何传递了两个参数进去....然后发现是自己太菜....
下面给出包含reverse的头文件,定义 以及简单的用法...
- template <class BidirectionalIterator>
- void reverse (BidirectionalIterator first, BidirectionalIterator last)
- {
- while ((first!=last)&&(first!=--last)) {
- std::iter_swap (first,last);
- ++first;
- }
- }
使用:
在向量中:
- #include <iostream> // std::cout
- #include <algorithm> // std::reverse
- #include <vector> // std::vector
-
- int main () {
- std::vector<int> myvector;
-
-
- for (int i=1; i<10; ++i) myvector.push_back(i);
-
- std::reverse(myvector.begin(),myvector.end());
-
-
- std::cout << "myvector contains:";
- for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
- std::cout << ' ' << *it;
- std::cout << '\n';
-
- return 0;
- }
在string类中:
- #include<iostream>
- #include<string>
- #include<cstring>
- #include<algorithm>
-
-
- using namespace std;
- int main()
- {
- string a;
- while(cin>>a)
- {
- string b;
- reverse(a.begin() ,a.end());
- cout<<a<<endl;
- b=a;
- cout<<b<<endl;
- }
- return 0;
- }