G good->perfect

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值