1、s.c_str();
C语言中没有string类型,C语言接口函数(例:strstr())的string需要转char*。
用法:string转char*:c_str()
2、strstr(str1.c_str(),str2);
C语言中的函数,在字符串中查找另一个字符串是否存在,不存在返回false,存在返回true。
char * strstr(const char *str1, const char *str2);
用法:strstr()
3、s.replace(pos, len, str);
用str来替换下标从pos开始替换长度为len的子串。
用法:replace()
4、s.at(i);
定位字符串string类型中字符。等价于char*类型中的s[i]。
5、s.substr(pos,n);
截取s中从pos开始(包括0)的n个字符的子串,并返回。n可不写,默认截取s中从从pos开始(包括0)到末尾的所有字符的子串,并返回。
字符串常见函数
6、rand()%n,srand((int)time(0));
#include <cstdlib>
#include <ctime>
srand((int)time(0)); //产生随机种子,每次产生的随机数不一样
int a = x + rand()%10; //产生[x,10)之间的随机数
7、i=str.find(s.c_str(),pos);
找到子串返回其下标,否则返回string::npos,npos是-1的无符号表示,是个大正数。
8、char*和string转换
- char*变string:
void function(char* str){ //统计char*字符串长度不能用str.size(),只能用strlen(str);
string s(str); //也可string s = str;
}
或:
char a[] = "ABCE";
string str(a);
- string变char*:
char str[s.size()+1]; //需要预先指定大小
auto ret=s.c_str(); //先把string类型的s变为char*
strcpy(str,ret); //再把char*拷贝给str,注意string变char*用strcpy复制
//注:不能直接用str=s.c_str()来转,会报错
- string类型也可以直接用str[i]下标访问字符。
- 初始化时char* str和char str[]的区别:前者指向常量(不可变常量值),后者可以改变str的值。
- string转char*的数组长度问题,需要+1,还有个结束符'0',不加可能会报错。
int len=aa.length();
char* bb=new char[len+1]; //还有个结束符'0'
strcpy_s(bb,len+1,aa.c_str());
...
delete [] bb; //用完后
9、s.insert(i,"%20");
在字符串s中的i位置插入"%20"字符串。
ret.insert(vec);//在集合ret中插入元素vec,vec也可以是容器,要看集合ret的类型。
10、sort(vec.begin(),vec.end());
对整型容器vec中的元素排序。前n项排序则上限用vec.begin()+n;
还可以加个cmp的函数来按想要的方式排序:sort(vec.begin(),vec.end(),cmp);
sort(vec.begin(),vec.end(),cmp);
//这是对整型数组按字典排序
bool cmp(int a,int b){
string s1 = to_string(a);
string s2 = to_string(b);
return s1<s2;
}
//这是对整型从大到小逆向排序
bool cmp(int x,int y){
return x>y;
}
11、s.assign(vec.begin(), vec.end());
容器拷贝,把容器或者集合vec中元素拷贝到容器s中,通常和集合使用去重:
vector<int> vec;
set<int> ret(vec.begin(), vec.end()); //vec的元素逐个插入集合ret
vec.assign(ret.begin(), ret.end());
或者
vector<int> vec;
set<vector<int>> ret;
ret.insert(vec); //整个vec一次性插入集合ret
for(auto x:ret)
vec.push_back(x); //set再逐个插入容器vec,即可去重
对于数组拷贝到容器:
int a[] = {...};
vec.assign(a,a+a.size())
12、stoi 和 to_string()
string转整数:int y = stoi(s); 或者int y = atoi(s.c_str());
整数转string:string s = to_string(y);
13、reverse(y.begin(),y.end());
reverse函数功能是逆序(或反转),多用于字符串、数组、容器。反转在[first,last)范围内的顺序,头文件是#include <algorithm>。例:
14、s.erase(pos,n);
string.erase(pos,n) //删除从pos开始的n个字符,例:s.erase(1,2);
s.erase(s.begin()); //删除pos处的一个字符(pos是string类型的迭代器)
s.erase(s.begin()+1,s.end()-1); //删除从first到last中间的字符(first和last都是string类型的迭代器)
(注:也可用于整型容器)
15、vec.clear();
清空vec的内容,更多有关vec的操作如图:
16、