1.字符串string
1.1 字符串长度
string s
int s_len=strlen(s.c_str());
int s_len2=s.size();
1.2 截取字符串的一部分
string word = s.substr(起始, 长度);
1.3 插入空格
num为空格长度,sum为s的长度
string tmp(num, ' ');
s = s.substr(0, sum)+tmp+s.substr(sum);
sum+=num;
1.4输入字符串
string s;
cin>>s;
1.5 26个字母一个访问数组,其中涉及到string向int的转换
int letter[26]={0};
int pos=s[j] - 97; //97='a'
letter[pos]++;
1.6 对很多行的string先进行冒泡排序去重,然后再将它们输出
vector<string> subString;
for(int i=0;i<subString.size();i++)//冒泡排序,并除去重复的元素
for(int j=0;j<subString.size()-i-1;j++)
{
if(subString[j]>subString[j+1])
{
swap(subString[j],subString[j+1]);
}
else if(subString[j]==subString[j+1])
subString.erase(subString.begin()+j,subString.begin()+j+1);
}
for(int i=0;i<subString.size();i++)
cout<<subString[i]<<endl;
1.7string由一个个的char构成
string ans;
ans+=(char)('0'+pad[now][last[now]]);
cout<<ans<<endl;
1.8 反向找斜杠\\并且把字符串后面的内容给保存了,用在路径找文件上这个方法真的很好。
string input;
unsigned int f = input.rfind('\\');
string file = input.substr(f + 1);
1.9 记录s1当中空格的个数
int n1=cout(s1.begin(),s1.end(),'')
比较牌大小,以一个排序,然后比较其中的顺序
string card="345678910JQKA2";
int l=card.find(s1[0]);
int r=card.find(s2[0]);
string ans=l>r?s1:s2;
cout<<ans<<endl;
1.11 hash可以用256长度的数组来统一记录这些字符
bool times[256] = {0};
string A;
times[A[i]];
1.12 在字符串当中寻找特定的字符串部分。比如下面就是计算str字符串当中“coder”的个数为多少。
int length=0;
int pos=str.find("coder");
while(pos!=-1){
str=str.substr(pos+5);
pos=str.find("coder");
length++;
}
if(length!=0)
array.push_back(make_pair(str,length)); <strong> </strong>
1.13 找到一个特定的字符然后替换它
while(string::npos!=(p=A.find("%s")))\\也可以写成是!=-1
A.replace(p,2,1,arg[q++])
A=A.substr(0,pos)+arg[index++]+A.substr(pos+2);
1.14string真的是这样都可以
reverse(str.begin(), str.end());
string ans;
while (!str.empty()) {
ans.push_back(str.back());
str.pop_back();
if(judge(str))
break;
}
reverse(ans.begin(), ans.end());
return ans;
1.15输入,如果输入包含空格。就这样输入
string str;
while (getline(cin, str)){
cout << str << endl;
}
2.1map映射,统计字符串个数的时候可以使用
map<string,int> word_count;
vector<string> words;
for(int i=0;i<words.size();i++)
word_count [ words [ i ] ]++;
if ( word_count.find(word)!=word_count.end())\\找到了
2.2 血缘查水表
map<pair<string,string>,vector<string>> data;
data[make_pair("A" ,"A" )]={"A","O"};
data[make_pair("A" ,"AB")]={"A","AB","B"};
data[make_pair("A" ,"B" )]={"A","AB","B","O"};
data[make_pair("A" ,"O" )]={"A","O"};
data[make_pair("AB","AB")]={"A","AB","B"};
data[make_pair("AB","B" )]={"A","AB","B"};
data[make_pair("AB","O" )]={"A","B"};
data[make_pair("B" ,"B" )]={"B","O"};
data[make_pair("B" ,"O" )]={"B","O"};
data[make_pair("O" ,"O" )]={"O"};
pair<string,string> t=make_pair(father,mother);
if (data.find(t)!=data.end()) return data[t];
else return data[make_pair(mother,father)];
3.跳出循环
3.1.break
要跳出循环
3.2.continue
不用跳出循环
4.struct很常用,像什么身高体重然后要排序什么的。
struct player
{
int w;
int h;
};
bool com_w(player p1,player p2)
{
//按照体重从小到大排序
if(p1.w != p2.w)
return p1.w <= p2.w;
//在体重相等的条件下,身高高的在前(在上)
else
return p1.h>p2.h;
}
for(int i = 0;i<n;i++)</span>
{
player pt;
cin>>index>>w>>h;
pt.w = w;
pt.h = h;
p.push_back(pt);
}
sort(p.begin(),p.end(),com_w);
4.最大公约数
int gcd(int a,int b){
int tmp;
while(b){
tmp = b; b = a % b ; a = tmp;
}
return a;
}