题目描述
模拟题一般都比较麻烦
下面是我遇到的错误
1注意题目中的信息,所给的字符串中为小写字母,因次不用考虑大写字母。
2遇到数字是不会出现1位及以上的数字,(我就考虑了结果当场炸裂)
3使用一些封装好的函数可以省去很多麻烦。
4一定要看清楚题的意思,不然debug老半天(其实细节都在题里面)
5第一位会出现‘-’,要特判一下。
6数字和字母不一样,字母可能会转化为大写字母,但是数字不会,这里也得特判
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int p1, p2, p3;
string str, name;
string tran1(int l)
{
char a = str[l - 1], b = str[l + 1];
string sum;
int s = 0;
if (p1 == 2&&islower(a)&&islower(b)) s = -32;
for (char i = a + 1 + s; i < b + s; i++)
if (p1 == 3)
sum.append(p2, '*');
else sum.append(p2, i);
if (p3 == 2)
reverse(sum.begin(),sum.end());
return sum;
}
int main()
{
cin >> p1 >> p2 >> p3 >> str;
for (int i = 0; i < str.size(); i++)
{
char a = str[i - 1], b = str[i], c = str[i + 1];
if (b == '-' && a < c && (islower(a) && islower(c) || isdigit(a) && isdigit(c))&&i!=0)
name += tran1(i);
else
name += b;
}
cout << name << endl;
return 0;
}
算法1
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int p1, p2, p3;
string str, name;
string tran1(int l)
{
char a = str[l - 1], b = str[l + 1];
string sum;
int s = 0;
if (p1 == 2&&islower(a)&&islower(b)) s = -32;
for (char i = a + 1 + s; i < b + s; i++)
if (p1 == 3)
sum.append(p2, '*');
else sum.append(p2, i);
if (p3 == 2)
reverse(sum.begin(),sum.end());
return sum;
}
int main()
{
cin >> p1 >> p2 >> p3 >> str;
for (int i = 0; i < str.size(); i++)
{
char a = str[i - 1], b = str[i], c = str[i + 1];
if (b == '-' && a < c && (islower(a) && islower(c) || isdigit(a) && isdigit(c))&&i!=0)
name += tran1(i);
else
name += b;
}
cout << name << endl;
return 0;
}