C++面试算法题之必备技能!字符串的万能函数!
相信不少同学们遇到面试的算法题时,一遇到字符串类型的题目就头疼!!
毕竟输入输出都成困难,长长的字符串如何把它提炼出来有用的呢?
遇到读取遇到换行时中断和遇到空格就中断的字符串该怎么处理呢?
这里推荐几个比较常用的函数和字符串的解题技巧!!
字符串———substr()函数
类似于java里的字符串分割函数,算是字符串函数里非常实用的一种
substr(‘Hello World’,2,4) //返回结果为 ‘ello’
substr(‘Hello World’,-3,3)//返回结果为 ‘rld’ *负数(-i)表示截取的开始位置为字符串右端向左数第i个字符
substr(‘Hello World’,-3,3)//返回结果为 ‘rld’ *负数(-i)表示截取的开始位置为字符串右端向左数第i个字符
#include<string> #include<iostream> using namespace std; main() { string s("12345asdf"); string a=s.substr(0,5); //获得字符串s中 从第0位开始的长度为5的字符串//默认时的长度为从开始位置到尾 cout<<a<<endl; } 输出结果为: 12345
字符串———find()函数
假设我们有字符串a和b,那么a.find(b)是指在a这个字符串中查找b并返回b开头字母的位置,没查到就是-1
字符串———find()函数
假设我们有字符串a和b,那么a.find(b)是指在a这个字符串中查找b并返回b开头字母的位置,没查到就是-1
if(s1.find('a')!=-1){
isStingstream用法
可以用在getline读取很长的字符串后使用isstringstream进行分割字符串。
他会自动把空格前和空格后的字符串进行分割,格式也是比较奇特,它本身也是一种数据类型
#include<iostream> #include<algorithm> #include<sstream> //istringstream 必须包含这个头文件#include<string> using namespace std; int a[10],cnt=0; int main() { string str="i am a boy"; string str1="5 4 3 2 1 6 "; istringstream is(str); istringstream is1(str1); string s; while(is>>s) cout<<s<<endl; while(is1>>a[cnt++]); sort(a,a+cnt-1); for(int i=0;i<cnt-1;i++) { cout<<a[i]<<endl; } }