字符串的查找:
#include<bits/stdc++.h>
using namespace std;
int main() {
string a;///////////////定义成字符串
string b;///////////// 定义成字符串
cin>>a>>b;/////////////输入字符串A与B
int len=a.size();/////A的长度a.length()==a.size()
cout<<len<<endl;/////输出长度并换行
int s=a.find(b);////查找字符串B在A中出现的首位置,
cout<<s;////////////如没有返回值为-1
}
int main() { ////////////同样的效果
char a[10]="asdfg",b[10];
scanf("%s",b);
char *f=strstr(a,b);
if(f!=NULL)
printf("%d",int(f-a));//返回首位值
else
printf("-1");
}
字符串的替换:
replace函数包含于头文件
#include<string.h>
中。
用法一:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a = "hello world !!!!";
a=a.replace(a.find("e"),1,"aa");
cout<<a<<endl;
return 0;
}
输出为:
haallo woreld !!!!
它只替换第一次出现的字符。
用法二:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a = "Hello World !!!";
a=a.replace(a.begin()+1,a.begin()+2,"#");
cout<<a<<endl;
return 0;
}
输出为:
H#llo World !!!
用#替换从begin位置开始的1个字符
substr 截取
在#include<string.h >
中
int main() {
string a="abcdefg";
string b;
cout<<a.substr(2)<<endl;//从下表2开始后所有。。
cout<<a.substr(2,3)<<endl;//从下表2开始后面3位;
b=a.substr(2);
cout<<b;
}
进制转换
下面属于非库标准
#include<stdio.h>
#include<stdlib.h>
int main(){
int i,n,t;
char a[200],b[200];
scanf("%d\n",&t);
while(t--){
scanf("%s",a);
char *s;
long long ans=strtol(a,&s,36);//->10
itoa(ans,b,3);//10->
puts(b);
}
}
位运算
int lowbit(int n){
return n&-n;
}
返回值为n二进制倒数最后一个一代表的十进制数。
例如 30 二进制为 11110 则会返回2
因为 11110——>10——>2.
去重函数unique
使用时必须先排序
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int n,a[1010],t;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
t=unique(a,a+n)-a;
for(int i=0;i<t;i++)
cout<<a[i]<<" ";
}
reverse 颠倒
#include<bits/stdc++.h>
using namespace std;
int main(){
string s="asdfgh";
reverse(s.begin()+1,s.end()-1);//开始-->结束
cout<<s;
}
insert 插入
erase 删除
append 接
replace 替换
#include<bits/stdc++.h>
using namespace std;
int main() {
int len=0;
string a,b;
getline(cin,a);
a.insert(3, "asd");//在 3 位置插入字符串
cout<<a<<endl;
a.erase(3, 3);//删除从 3 开始的 3 个字符。
cout<<a<<endl;
a.append("asde", 1, 3);//将字符串 s 中,从 1 开始的 3 个字符连接到当前字符串结尾。
cout<<a<<endl;
a.replace(1, 3, "asdf");// 删除从 1开始的 3 个字符,然后在 1 处插入串 s。
cout<<a<<endl;
}
vector
vector<int>a;
cout<<count(a.begin(),a.end(),k);//a中k出现的次数//线性时间
vector<int>a;
bool cmp(double a) {
return a<60;
}//a中有多少个小于60的数
cout<<count_if(a.begin(),a.end(),cmp);
vector<int>a;//a中所有数的总和加上k
cout<<accumulate(a.begin(),a.end(),k);
is_sorted()
for(int i=0;i<n;i++)cin>>a[i];
if(is_sorted(a,a+n))cout<<"YES\n";//如果升序返回1 相等也返回1
partial_sort()
for(int i=0;i<n;i++)cin>>a[i];
partial_sort(a,a+x,a+n);// 把最小的x个数 放前面 并只排这x个数
for(int i=0;i<n;i++)cout<<a[i]<<" ";
还有好多,学了在补。