我的版本非常的简单易理解
#include<stdio.h>
#include<string.h>
int index(char s[],int l)//求要删除的那部分的起始的下标
{
int res;
for(int i=l,flag=3;flag!=0;i--)//三个空格完了就是要删的部分
{
if(s[i]==' ')flag--;
res = i;
}
return res;//返回倒数第三个空格的下标
}
void del(char *s,int idx)
{
for(int i=idx;i<100;i++)//暴力一下,把第三个空格以后的100位全替换成\0
{
s[i]='\0';
}
}
int main()
{
int n=0;
scanf("%d",&n);
getchar();
char str[]=" qiao ben zhong.";
while(n--)
{
char s[10000];
gets(s);
int x =strlen(s);
int l,r;
//根据 , 和 . 来卡一下押韵角位置
for(int i=0;i<x;i++)
{
if(s[i]==',')l=i;
if(s[i]=='.')r=i;
}
//判断是不是满足要求
if(s[l-1]=='g'&&s[l-2]=='n'&&s[l-3]=='o'&&s[r-1]=='g'&&s[r-2]=='n'&&s[r-3]=='o')
{
int idx = index(s,x);//求要删除部分起始下标
del(s,idx);//删除
strcat(s,str);//检测第一个\0的位置开始替换
printf("%s\n",s);
}
else printf("Skipped\n");
}
}