1.题目思路
本题就定义一个计数器然后便利一下字符串,注意字符串里可能含有空格,用cin的话只会读取到空格,它就会认为这是一个完整的字符串了,但我们需要读取整行,所以用getline。
代码实现
cpp
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
getline(cin, s);
int count = 0;
for (int i = 0; i < s.size(); i++)
{
if (s[i] == ' ' || s[i] == '\n')
continue;
++count;
}
cout << count;
return 0;
}
2.题目思路
就if-else每种情况比比大小,不能直接用字符串比较来做,默认是按字典序来比较,不准。写if-else的时候,除了s1==s2的情况,其余情况就只考虑Player1赢的情况,最后一个else就是Player2赢。
代码实现
cpp
#include<iostream>
#include<string>
using namespace std;
int n;
int main()
{
cin >> n;
while (n--)
{
string s1, s2;
cin >> s1 >> s2;
if (s1 == s2)
{
cout << "Tie" << endl;
}
else if (s1 == "Rock" && s2 == "Scissors")
{
cout << "Player1" << endl;
}
else if (s1 == "Scissors" && s2 == "Paper")
{
cout << "Player1" << endl;
}
else if (s1 == "Paper" && s2 == "Rock")
{
cout << "Player1" << endl;
}
else
{
cout << "Player2" << endl;
}
}
return 0;
}
3.题目思路
纯模拟。注意解密之后'a'->'z','A'->'Z'。注意不要直接写3个if,要用else if,不然比如说将si由a改成z之后,代码往后走又满足条件又进if里去多减了一次。
代码实现
cpp
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;//直接原字符串上修改
getline(cin, s);
for (int i = 0; i < s.size(); i++)
{
if ((s[i] >= 'b' && s[i] <= 'z') || (s[i] >= 'B' && s[i] <= 'Z'))
s[i] -= 1;
else if (s[i] == 'a')
s[i] = 'z';
else if (s[i] == 'A')
s[i] = 'Z';
}
cout << s;
return 0;
}
4.题目思路
纯模拟。
代码实现
cpp
#include<iostream>
#include<string>
using namespace std;
int q;
string s;
int main()
{
cin >> q >> s;
while (q--)
{
int op = 0;
cin >> op;
if (op == 1)
{
string s_add;
cin >> s_add;
s += s_add;
cout << s << endl;
}
else if (op == 2)
{
int a, b;
cin >> a >> b;
s = s.substr(a, b);//文中说的第几个字符就表示的下标
cout << s << endl;
}
else if (op == 3)
{
int a;
string tmp;
cin >> a >> tmp;
s = s.insert(a, tmp);
cout << s << endl;
}
else
{
string sub;
cin >> sub;
size_t re = s.find(sub);
if (re == string::npos)
cout << -1 << endl;
else
cout << re << endl;
}
}
return 0;
}
5.题目思路
直接看代码就能看懂。
代码实现
cpp
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
cin >> s;
cout << s.size();
//以单词为单位读
while (cin >> s)
{
cout << ',' << s.size();
}
return 0;
}
6.题目思路
认识一个库函数reverse。
代码实现
cpp
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string s;
while (cin >> s)
{
reverse(s.begin(), s.end());
cout << s << endl;
}
return 0;
}
7.题目思路
直接看代码。
代码实现
cpp
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string s;
int main()
{
cin >> s;
int begin = 0;
int end = s.size() - 1;
while (begin <= end)
{
if (s[begin] == s[end])
{
++begin;
--end;
}
else
{
cout << "no" << endl;
break;
}
}
if (begin > end)
cout << "yes" << endl;
return 0;
}
8.题目思路
首先本题需要用getline读取一整行字符串,因为字符串中包含空格。读取完成之后就便利字符串并且在便利的过程之中计算每一个字符要按多少下,最后累加在一起就是答案。怎么计算呢?每一个字符的按的次数都是固定的,我们可以将它们存起来,就很想算每个月的最大天数,每个月的最大天数也是固定的,除了润年要单独判断,其他的就都固定的,所以也是存进到了一个数组里,方便直接根据下标找到对应的值。

那怎么根据字母去计算到它对应的次数在哪个下标里存着呢?用ASCII码表就可以了,a的ASCII码为97,只要用si-97就能得到对应的下标。
代码实现
cpp
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
int cnts[26] = { 1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4 };
string s;
getline(cin, s);
int cnt = 0;//总按键次数
for (int i = 0; i < s.size(); i++)
{
//空格按一次,特判一下
if (s[i] == ' ')
++cnt;
else//加else和不加else是两回事
cnt += cnts[s[i] - 97];//s[i]-97就是对应下标
}
cout << cnt;
return 0;
}
9.题目思路
先按照字符串读入第一个字符串,判断一下是不是a/b/c,如果是说明当前这行有3个数据,如果不是,就说明当前这行有两个数据,执行的是上一次的计算。
代码实现
cpp
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int i;
int main()
{
cin >> i;
string op;
string last_op;
while (i--)
{
cin >> op;
//该行有3个数据
if (op == "a" || op == "b" || op == "c")
{
string x, y, ans;
cin >> x >> y;
int l = stoi(x);
int r = stoi(y);
ans = x + y;
if (op == "a")
{
printf("%d+%d=%d\n", l, r, r + l);
ans += to_string(r + l);
//+2是加的+和=
cout << ans.size() + 2 << endl;
}
else if (op == "b")
{
printf("%d-%d=%d\n", l, r, l - r);
ans += to_string(l - r);
cout << ans.size() + 2 << endl;
}
else
{
printf("%d*%d=%d\n", l, r, l * r);
ans += to_string(r * l);
cout << ans.size() + 2 << endl;
}
last_op = op;//存一下这一次的运算符号
}
//该行有2个数据
else
{
string y, ans;
cin >> y;
int l = stoi(op);
int r = stoi(y);
ans = op + y;
if (last_op == "a")
{
printf("%d+%d=%d\n", l, r, r + l);
ans += to_string(r + l);
cout << ans.size() + 2 << endl;
}
else if (last_op == "b")
{
printf("%d-%d=%d\n", l, r, l - r);
ans += to_string(l - r);
cout << ans.size() + 2 << endl;
}
else
{
printf("%d*%d=%d\n", l, r, l * r);
ans += to_string(r * l);
cout << ans.size() + 2 << endl;
}
}
}
return 0;
}