G
good->perfect
时间限制:1000ms 内存限制:65536kb
通过率:296/347 (85.30%)
正确率:296/1097 (26.98%)
题目描述
程小设获得了一个神奇魔法。该魔法可以将一个字符串中“好”的片段转化为perfect
字符串。
”好“的片段定义为:形如字母g
+两个及以上字母o
+字母d
,且中间没有其他字符的片段。比如good
gooood
是”好“的片段,god
gooad
不是”好“的片段。
请编程告诉他,如果使用魔法,将一个字符串所有”好“的片段转化为perfect
字符串,最后的字符串应该是什么样子。
输入
多行输入,每行一个字符串,仅包含小写字母和空格。
输出
对于每行输入,输出一行,为使用魔法之后的字符串。
样例输入
good good dogfood
go od do og fo od
gggoooooooooooddd
样例输出
perfect perfect dogfood
go od do og fo od
ggperfectdd
数据范围
行数不超过5050行,字符串长度|S||S|满足1≤|S|≤501≤|S|≤50。
输入仅包含小写字母,空格,及行末换行符\n
。
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
char putin[105];
int judge(char putin[105], int i, int len);
int count(char putin[105], int i, int len);
int main()
{
int i, len;
while (gets(putin) != NULL)//存放输入的字符串
{
i = 0;
len = strlen(putin);
while (i < len)//当i>= len 时,说明已经扫完了该数组,那么就跳出循环
{
while (putin[i] != 'g' && i < len)//没碰到g就输出
{
printf("%c", putin[i]); i++;
}
if (i >= len)//两种情况:1. 已经扫到了最后,跳出循环
break;
if (judge(putin, i, len) == 1)//2. 没扫到最后,说明遇到了g,那么需要判断时候有可以被替换的good字符串
{
printf("perfect");
i += count(putin, i, len);
}
else
{
printf("g");
i++;
}
}
printf("\n");
}
return 0;
}
int judge(char putin[105], int i, int len)
{
int j =1;
while (putin[i + j] == 'o' && i + j < len - 1)
j++;
if (putin[i + j] == 'd' && j - 1>= 2)
return 1;
else
return 0;
}
int count(char putin[105], int i, int len)
{
int j = 1;
while (putin[i + j] == 'o' && i + j < len - 1)
j++;
return j + 1;
}