题目:
输入两个字符串,从第一个字符串中删除第二个字符串中的所有字符
比如输入第一个字符串:“They are students."
第二个字符串: "aeiou"
删除之后的第一个字符串变成"The r stdnts."
题目分析(思路):
创建三个string类对象 第一个s1第二个str2为题目要求的字符串
第三个str3则用来接收最后需要输出的字符串
循环遍历上面两个字符串 str1 str2
如果str1中出现了str2中的任何一个则跳过看下一个字符 然后将str1中的下一个字符再与str2中的字符进行一一比较
以此类推 相同跳过 str1中没有一个与str2中的字符相同则压入str3中
代码展示:
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1;
string str2;
string str3;
char n=0,m=0;
while (1) {
n = getchar();
if (n == '\n') {
break;
}
str1.push_back(n);
}
while (1) {
m = getchar();
if (m == '\n') {
break;
}
str2.push_back(m);
}
bool sign = true;
string::iterator it1 = str1.begin();
string::iterator it2;
for (it1;it1 != str1.end();++it1) {
for (it2=str2.begin();it2 != str2.end();++it2) {
if (*it1 == *it2) {
sign = false;
break;
}
}
if (sign==true){
str3.push_back(*it1);
}
sign = true;
}
cout << str3.c_str() << endl;
system("pause");
return 0;
}部分代码分析:
while (1) {
n = getchar();
if (n == '\n') {
break;
}
str1.push_back(n);
}这段代码 ↑ 是输入一个字符串str
bool sign = true;
string::iterator it1 = str1.begin();
string::iterator it2;
for (it1;it1 != str1.end();++it1) {
for (it2=str2.begin();it2 != str2.end();++it2) {
if (*it1 == *it2) {
sign = false;
break;
}
}
if (sign==true){
str3.push_back(*it1);
}
sign = true;
}这段代码 ↑ 应该是解这个题目的关键核心
巧妙之处在于定义了一个bool变量 用来标记字符串str2中的其中一字符是否与str1中的其中一个字符相同
相同则标记为false 然后跳出循环 进行str1中下一个字符的判断 以此类推
需要注意的是 在压入str3后 要将标记sign重新置为true
否则上面一步sign被置为false 如果str1中下一个字符与str2中字符没有一个相同 那么也不会被压入str3中
版权声明:本文为qq_41359293原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。