-
1、数据结构的遍历方式 - 当然是范围遍历,迭代器遍历,直接遍历三种了
- vector支持三种遍历
for(int i=0;i<v.size();i++)
cout<<v[i]<<endl;
for(vector<int>::iterator it=v.begin();it<v.end();it++)
cout<<*it<<endl;
for(int x:v) cout<<x<<endl;
尽量不写auto
for(int x:s) cout<<x<<endl;
尽量不写auto
map<char,int>mp;
mp['a']=1;
mp['b']=2;
mp['c']=3;
for(char i='a';i<='z';i++) cout<<mp[i]<<endl;
-
2、getline(cin,s)函数 - 携带空格输入字符串的函数,要是数据很糟糕可先用getchar吃回车
string s;
getline(cin,s);
输入:asdfghjkl<回车>
输出:asdfghjkl
- get函数已经被舍弃,forget也不好用会读入回车,只有getline还算很好
-
3、0&&‘0’ - 今天做题发现字符串翻转去掉前导零老是搞混乱,下次一定要注意字符串翻转前导零和小数翻转的后导零都要去掉
while(s[cnt]=='0'&&cnt>0) cnt--;
int x=cnt;
for(int i=cnt;i>=0;i--)
cout<<s[i];
m=s.size()-1;
while(s[x+1]=='0'&&x<m-1) x++;
while(s[m]=='0'&&x<m-1) m--;
for(int i=m;i>x;i--)
cout<<s[i];
- 去除前串翻转之后的前导零
- 去除后串翻转之后的前导后导零并最少留一位0
-
4、子串判别的一般方式 - 找到对应的位置遍历子串完全匹配就是他的子串,否则循环遍历母串的下一个开头
for(int i=0;i<s.size();i++)
{
if(str[0]==s[i])
{
int cnt=0;
for(int j=0;j<str.size();j++)
{
if(str[j]==s[i+j])
{
cnt++;
}
}
if(cnt==str.size()&&(s[i-1]==32||i==0)&&s[i+cnt]==32)
{
if(!is_find)pos=i;
ans++;
is_find=true;
}
}
}
|