P5015 [NOIP 2018 普及组] 标题统计 - 洛谷1.题目思路本题就定义一个计数器然后便利一下字符串注意字符串里可能含有空格用cin的话只会读取到空格它就会认为这是一个完整的字符串了但我们需要读取整行所以用getline。代码实现#includeiostream #includestring 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; }B2112 石头剪子布 - 洛谷2.题目思路就if-else每种情况比比大小不能直接用字符串比较来做默认是按字典序来比较不准。写if-else的时候除了s1s2的情况其余情况就只考虑Player1赢的情况最后一个else就是Player2赢。代码实现#includeiostream #includestring 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; }B2115 密码翻译 - 洛谷3.题目思路纯模拟。注意解密之后a-zA-Z。注意不要直接写3个if要用else if不然比如说将s[i]由a改成z之后代码往后走又满足条件又进if里去多减了一次。代码实现#includeiostream #includestring 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; }P5734 【深基6.例6】文字处理软件 - 洛谷4.题目思路纯模拟。代码实现#includeiostream #includestring 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; }B2120 单词的长度 - 洛谷5.题目思路直接看代码就能看懂。代码实现#includeiostream #includestring using namespace std; int main() { string s; cin s; cout s.size(); //以单词为单位读 while (cin s) { cout , s.size(); } return 0; }B2122 单词翻转 - 洛谷6.题目思路认识一个库函数reverse。代码实现#includeiostream #includestring #includealgorithm using namespace std; int main() { string s; while (cin s) { reverse(s.begin(), s.end()); cout s endl; } return 0; }B2124 判断字符串是否为回文 - 洛谷7.题目思路直接看代码。代码实现#includeiostream #includestring #includealgorithm 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; }P1765 手机 - 洛谷8.题目思路首先本题需要用getline读取一整行字符串因为字符串中包含空格。读取完成之后就便利字符串并且在便利的过程之中计算每一个字符要按多少下最后累加在一起就是答案。怎么计算呢每一个字符的按的次数都是固定的我们可以将它们存起来就很想算每个月的最大天数每个月的最大天数也是固定的除了润年要单独判断其他的就都固定的所以也是存进到了一个数组里方便直接根据下标找到对应的值。那怎么根据字母去计算到它对应的次数在哪个下标里存着呢用ASCII码表就可以了a的ASCII码为97只要用s[i]-97就能得到对应的下标。代码实现#includeiostream #includestring #includealgorithm 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; }P1957 口算练习题 - 洛谷9.题目思路先按照字符串读入第一个字符串判断一下是不是a/b/c如果是说明当前这行有3个数据如果不是就说明当前这行有两个数据执行的是上一次的计算。代码实现#includeiostream #includestring #includealgorithm 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; }