描述: |
详细描述:
原型: int ChangeString(char *pInStr,char *pOutStr) 输入参数: char *pInStr 输入字符串 输出参数: char *pOutStr 输出字符串,内存空间已分配好,可直接使用 返回值: int 0:处理成功 -1:出现异常 限制: 无 举例: pInStr:jkds*^*(HKEEEklIdddjilfff pOutStr:jkds*^*(HKEEEklIejilg
|
注意:要求最终输出的字符串中不再存在任何连续出现3次的小写字母。
4
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include "oj.h"
using namespace std;
int ChangeString(char *pInStr, char *pOutStr)
{
if (pInStr == NULL || pOutStr == NULL)
{
return -1;
}
int lens = strlen(pInStr);
int lensbak = lens;
int i = 0, j = 0;
bool flag = true;
char *pInbak = (char*)malloc(lens+1);
memset(pInbak, 0, lens + 1);
strcpy_s(pInbak, lens + 1, pInStr);
char *pOutbak = (char*)malloc(lens + 1);
memset(pOutbak, 0, lens + 1);
while (flag)
{
flag = false;
i = 0, j = 0;
memset(pOutbak, 0, lensbak + 1);
/*每次的lens是不一样的*/
lens = strlen(pInbak);
for (i = 0; i < lens - 2; i++)
{
/*是小写字母,判断是否是三个连续*/
if ((pInbak[i] >= 'a' && pInbak[i] <= 'z') && pInbak[i] == pInbak[i + 1] && pInbak[i] == pInbak[i + 2])
{
flag = true;
if (pInbak[i] == 'z')
{
pOutbak[j++] = 'a';
}
else
{
pOutbak[j++] = pInbak[i] + 1;
}
i = i + 2;
}
else
{
pOutbak[j++] = pInbak[i];
}
}
/*如果最后三个不连续*/
if (!(pInbak[lens - 1] == pInbak[lens - 2] && pInbak[lens - 1] == pInbak[lens - 3]))
{
pOutbak[j++] = pInbak[lens - 2];
pOutbak[j++] = pInbak[lens - 1];
}
memset(pInbak, 0, lensbak + 1);
strcpy_s(pInbak, lens+1, pOutbak);
}
/*并把原字符串备份回来*/
pOutbak[j] = '\0';
strcpy_s(pOutStr, lens + 1, pOutbak);
free(pInbak);
free(pOutbak);
return 0;
}