遇到的问题
输入问题,若第一行为空,只用cin不行
超时问题。原思路是两层循环嵌套,暴力破解,一个一个挨个对比
学习大佬做法之后,更改为先处理错误行,将大小写全部填充完整,第二行只需使用find()函数即可
新学的内容 if(err.find(text[i])==string::npos) 表示在字符串中没有找到对应字母
代码1(错误代码)
#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
string err;
//cin >> err;
getline(cin, err);
int len1 = err.size();
string text;
//cin >> text;
getline(cin, text);
int len2 = text.size();
int i, flag = 0;
string result = "";
for(i = 0; i < len1; i++)
{
if(err[i] == '+') flag = 1;
}
for(i = 0; i < len2; i++)
{
int count = 0;
for(int j = 0; j < len1; j++)
{
if(text[i] != err[j])
{
count++;
}
if(text[i] == err[j]||((text[i] == err[j] + 32)&&text[i]>'a'&&text[i]<'z'))
{
count = 0;
}
}
if(count == len1)
{
if(flag == 1)
{
if(text[i]>'A'&&text[i]<'Z')
{
continue;
}
else result = result + text[i];
}
else result = result + text[i];
}
}
cout << result << endl;
return 0;
}
代码2(copy版)
来源: https://blog.csdn.net/liuchuo/article/details/51994766
#include<string>
#include<iostream>
using namespace std;
int main()
{
string err, text;
char ch;
getline(cin, err);
getline(cin, text);
int flag = 0, l = err.length(), sum = 0;
if(err.find('+') != string::npos)
{
flag = 1; //如果+在err前发现,则flag置1
}
for(int i = 0; i < l; i++)
{
if(err[i] >= 'a' && err[i] <= 'z')
{
ch = toupper(err[i]);
err += ch;
}
else if(err[i] >= 'A' && err[i] <= 'Z')
{
ch = tolower(err[i]);
err += ch;
}
}
for(int i = 0; i < text.length(); i++)
{
if(err.find(text[i])==string::npos) //在err中没有找到了对应字母
{
if(flag==1&&isupper(text[i]))
{
continue;
}
cout<<text[i];
}
else
sum++;
}
if(sum == text.length()) cout << endl;
return 0;
}