P1308 统计单词数
这是我的学完stl后觉得异常轻松一道题目
记录几个好用的东西
1.getline 可以接受一整行字符串
2.a[i]=tolower(a[i])全部转换为小写
toupper
3.为了防止部分满足 a=" “+a+” " ,b也一样
4.b.find(a)==string::npos
5.设置两个一个存开头,一个存数字
#include <iostream>
#include <string>
//命名空间
using namespace std;
int main(){
//定义两个字符串
string a;
string b;
//用string库,调用getline, 直接读入一整行
getline(cin,a);
getline(cin,b);
//转换大小写,可以都转换为大写,或者小写
for (int i=0;i<a.length();++i){
a[i]=tolower(a[i]);
}
for (int i=0;i<b.length();++i){
b[i]=tolower(b[i]);
}
//因为连起来的不算,所以要在前后加几个空格,一定要是同样多的,同量减同量,等于同量
a=' '+a+' ';
b=' '+b+' ';
//先看看会不会找不到,用a.find()和string::npos
if (b.find(a)==string::npos){
cout<<-1<<endl;
}
//如果找得到
else {
int alpha=b.find(a);
int beta=b.find(a),s=0;//计数器初始化为0
while (beta!=string::npos){
++s;//计数器
beta=b.find(a,beta+1);
}
cout<<s<<" "<<alpha<<endl;//输出第一个和总共有几个
}
//函数返回值为0,结束整个程序
return 0;
}
P3741 honoka的键盘
1.本身就存在的++,然后把它们干掉,他们没有用了
2.没被干掉的,且存在后面一个与自己相同的就可以+1
P1321单词覆盖和还原
1.这是两个没有重复字母的单词,所以一旦出现了就有了
2.但是如果只看这个,很可能会多算,如何避免,把三个和四个当成一个容器来看,所以其实就是找一个字母的个数,每动一次,只要匹配上一个就ok(这个思想好高级)
#include <bits/stdc++.h>
using namespace std;
int main()
{ int boy=0,girl=0;
string s;
cin>>s;
for(int i=0;i<s.length();i++)
{if((s[i]=='b')||(s[i+1]=='o')||(s[i+2]=='y'))
boy++;
}
for(int i=0;i<s.length();i++)
{if((s[i]=='g')||(s[i+1]=='i')||(s[i+2]=='r')||(s[i+3]=='l'))
girl++;
}
cout<<boy<<endl<<girl;
return 0;
}
P1597 语句解析
1.map能用字符直接作为下标 map<char,int>num 表示以char为下标,存储的是int
2.注意初始化
3.判断第三位是不是数字,是的话,直接用map赋值
4.输出
#include<iostream>
#include<map>
#include<cstdio>
using namespace std;
map <char,int> num;//字母是关键字,与赋值是一一映射关系
string st;
int main(){
cin>>st;
int len=st.length();
num['a']=num['b']=num['c']='0';
for(int i=0;i<len;i+=5)
if(st[i+3]>='0'&&st[i+3]<='9')
num[st[i]]=st[i+3];
else num[st[i]]=num[st[i+3]];
printf("%c %c %c",num['a'],num['b'],num['c']);
return 0;
}
利用switch+break
#include <bits/stdc++.h>
using namespace std;
int n[3]; //n[2]代表a,n[1]代表b,n[0]代表c
int main(){
string s;
cin >> s;
int slen=s.size();
for (int i=0;i<slen;i++){
int which=0; //用来记录左边是哪个变量
switch (s[i]){ //利用不加break的语言特性
case 'a':
which++;
case 'b':
which++;
}
i+=3; //跳过:=
if (s[i]>='0' && s[i]<='9') //判断右边是数字还是变量
n[which]=s[i]-'0'; //赋值
else{
int which2=0; //用来记录右边是哪个变量
switch (s[i]){ //利用不加break的语言特性
case 'a':
which2++;
case 'b':
which2++;
}
n[which]=n[which2]; //赋值
}
i++; //跳过;
}
for (int i=2;i>=0;i--){
cout << n[i] << ' ';
}
cout << endl;
return 0;
}
说实话没看太懂