携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情
题目一:7-1 删除字符串中指定字符(10 分)
题目描述:
删除字符串中的指定字符,字符串和要删除的字符均由键盘输入。
输入格式:
在第一行中输入一个长度不超过20的字符串、并以回车结束;在第二行中输入待删除的一个字符,并以回车结束。
输出格式:
在一行中输出删完指定字符的字符串。
输入样例:
abcdcf
c
输出样例:
abdf
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB PS: 这是第一道题目,可以说是签到题
思路分析:
- 我们可以直接使用string优秀的迭代器来处理这样的题目
- 想一想,直接使用erase就可以了
- 因为erase会将迭代器后移一位
代码如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
cin >> s;
char c;
cin >> c;
string::iterator it = s.begin();
while (it != s.end()) {
if (*it == c) {
s.erase(it);
continue;
}
it++;
}
cout << s;
}
结果如下:
PS:不要被第一题骗了,第二题是个坑货~
第二题:7-2 删除非英文字母(10 分)
题目描述:
输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。
输入格式:
输入一个字符串。
输出格式:
将字符串的所有非英文字母的字符删除后输出。
输入样例:
abc123+xyz.5
输出样例:
abcxyz
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
看到这题,我内心直呼,这不是比第一题简单,然后我就按照题目一的做法来做,然后我看着4分陷入沉思
思路分析:
其实和第一题差不多,但是这是个坑货——输入的可能会有空行,然后就会寄
所以要用getline来输入
代码如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a, b;
getline(cin, a);
for (int i = 0; i < a.size(); i++) {
if (isalpha(a[i]))
b += a[i];
}
cout << b;
}
结果如下:
ps:成功解题=理清思路+一定的技巧~