字符串处理之string
- 前言:
在机试当中,对于字符串的处理中使用string的话往往能够带来方便。
实例:
输出目录结构(路径打印)
string输入输出问题。
- 在机试时,为了节约时间,使用scanf和printf来输入输出字符串,但是该方法不能够输入输出string类型的字符串。
解决办法:
//输入时
char str[55];
scanf("%s", str);
s = str; //之后就可以用string的操作对s进行操作了
//输出时
printf("%s\n", s.c_str());//printf不能直接输出string类型,要 s.c_str()转化
string排序问题。
bool cmp(string a, string b){ //由于char数组不能这么排序,所以使用string
return a<b;
}
... ...
sort(v.begin(), v.end(), cmp); //v为vector<string> 类型
string的查找问题
- vector v 中存放很多string的数组,在v中查找某个数组。
find(v.begin(), v.end(), s) //查找s,返回iterator指针,当表示没有找到时:返回v.end()
- 在string中查找某个特定字符。
s.find('a') //在字符串s中查找a字符,返回该字符的位置下标
//当表示没找到时:
s.find('a')==string::npos
//从特定位置开始,查找第一个要找的字符串:
a = "hah"
int pos = s.find(a, startPos); //从string中下标startPos位置中开始查找a字符串
- 在string中查找最后某个字符时:
s.find_last_of('a') //查找s字符串中最后一个a的位置
//当表示没找到时:
s.find_last_of('a')==string::npos
string的删除
删除字符串中的一段字符:
s.erase(s.find_last_of('\\'), s.length()); //删除最后一个\后面的字符。如 aa\dd\cc 变为aa\dd
//erase第一个参数为删除开始的位置,第二个参数为删除多少个字符
string的子字符串
str.substr(startpos, length);
其中 startpos 是起始字符的序号,length是[从startpos开始]取的字符串长度(包括startpos )
如果要取得 str 中序号 m 到 n 之间(不包括n)的子字符串需要用
str.substr(m, n-m);
string sub_string = v[i].substr(v[i].find_last_of('\\')+1, v[i].length()); //求字符串,的子串。如:aa\dd\cc变为:cc
string的resize
对于string对象进行操作删除多余的字符后(例如a+++b++c,变成a+b+c时,需要最后需要使用到resize),需要使用到s.resize(n)
例如:
反转单词顺序