解题思路:
这道题,,我真的一言难尽,写了好半天,主要是各个条件的判断,写了就好了,难倒是不算难想,但工作量比较大。
代码如下:
#include<iostream>
#include<string>
using namespace std;
int oder1, oder2, oder3;
string ans;
int main()
{
cin >> oder1 >> oder2 >> oder3;
cin >> ans;
string::iterator it;
int i, flag;
char ch;
for (it = ans.begin(); it < ans.end(); ++it) {
flag = 0;
if (*it == '-') {
if (*(it - 1) >= 'a' && *(it - 1) <= 'z' && *(it + 1) >= 'a' && *(it + 1) <= 'z' && *(it - 1) != *(it + 1)) {
if (*(it + 1) - *(it - 1) == 1) {
ans.erase(it);
--it;
}
else {
if (oder1 == 1) {
ans.erase(it);
int t = *it - *(it - 1);
while (1) {
if (oder3 == 1) {
ch = *(it - 1) + 1;
for (i = 1; i <= oder2; ++i) {
ans.insert(it, ch);
++it;
}
if (*it - *(it - 1) == 1) break;
}
else if (oder3 == 2) {
ch = *(it)-1;
if (flag) ++it;
for (i = 1; i <= oder2; ++i) {
ans.insert(it, ch);
if (it != ans.end() - 1) ++it;
}
if (*it - *(it - 1) == t - 1) break;
--it, flag = 1;
}
}
}
else if (oder1 == 2) {
ans.erase(it);
int t = *it - *(it - 1);
while (1) {
if (oder3 == 1) {
if (flag) ch = *(it - 1) + 1 + 32;
else ch = *(it - 1) + 1;
for (i = 1; i <= oder2; ++i) {
ans.insert(it, ch - 32);
if (it != ans.end() - 1) ++it;
}
if (*it - (*(it - 1) + 32) == 1) break;
flag = 1;
}
else if (oder3 == 2) {
ch = *(it)-1 - 32;
if (flag) {
++it;
ch += 32;
}
for (i = 1; i <= oder2; ++i) {
ans.insert(it, ch);
++it;
}
if (*it - (*(it - 1) + 32) == t - 1) break;
--it, flag = 1;
}
}
}
else {
ans.erase(it);
int t = *it - *(it - 1);
for (i = 1; i <= oder2; ++i) ans.insert(it, '*');
}
}
}
else if(*(it - 1) >= '0' && *(it - 1) <= '9' && *(it + 1) >= '0' && *(it + 1) <= '9' && *(it - 1) != *(it + 1)) {
if (*(it + 1) - *(it - 1) == 1) {
ans.erase(it);
--it;
}
else {
if (oder1 == 1 || oder1 == 2) {
ans.erase(it);
int t = *it - *(it - 1);
while (1) {
if (oder3 == 1) {
ch = *(it - 1) + 1;
for (i = 1; i <= oder2; ++i) {
ans.insert(it, ch);
++it;
}
if (*it - *(it - 1) == 1) break;
}
else if (oder3 == 2) {
ch = *(it)-1;
if (flag) ++it;
for (i = 1; i <= oder2; ++i) {
ans.insert(it, ch);
++it;
}
if (*it - *(it - 1) == t - 1) break;
--it, flag = 1;
}
}
}
else {
ans.erase(it);
int t = *it - *(it - 1);
for (i = 1; i <= oder2; ++i) ans.insert(it, '*');
}
}
}
}
}
cout << ans;
return 0;
}
仅提供正确思路,如果想要各种情况适用,请把迭代器改成ans[i]的形式。主要是我(太懒)不想改