Acwing_3641.删除字符串2_贵州大学考研机试题

 一、题目描述

给你一个字符串 ,要求你将字符串中出现的所有 gzu (不区分大小写)子串删除,输出删除之后的  
就是说出现GzuGZGZu gzU 等都可以删除。

题目链接
3641. 删除字符串2 - AcWing题库

输入格式
一行不包含空格的字符串 

输出格式
删除之后的  
因删除子串而产生的gzu (不区分大小写)子串无需处理。

数据范围
输入字符串长度不超过100。

输入样例:

GzzGzukkgzUuu

输出样例:

Gzzkkuu

二、题目思路

语言:C语言

思路

  1. 首先利用 fgets() 函数进行输入,这里不建议使用 scanf() 函数一个字符一个字符边输入边判断,容易出问题。(我这里使用的是fgets,大家可以使用其他)。
     
  2. 定义一个新数组作为答案数组。循环遍历原数组 S ,判断 S[i]、S[i+1]、S[i+2] 三个字符是否为 gzu(不区分大小写)。如果是,就直接 i+=2; continue; 相当于把这三个字符删去了。如果不是,就将 S[i] 赋值给 newS[n]。具体如下:
    for(int i=0; i<len; i++){
        if((S[i]=='g' || S[i]=='G') && (S[i+1]=='z' || S[i+1]=='Z') && (S[i+2]=='u' || S[i+2]=='U')){
    		i+=2;
    		continue;
    	}
    	newS[n++] = S[i];
    }
  3. 这里就会出现一个问题,当 i 是最后两个字符时,这个判断就会越界。因此要在这个判断前再加一个判断,如果剩余最后两个字符,则一定不会被删除,直接赋值给结果数组。如下:
    if(i==len-1 || i==len-2){
    	newS[n++] = S[i];
    	continue;
    }

三、代码实现 

#include<bits/stdc++.h>
using namespace std;

char S[102];
char newS[102];
int n=0; 

int main(){
	for(int i=0; i<102; i++)	S[i] = '0'; // 初始化数组
	fgets(S,102,stdin);
	int len = strlen(S) - 1;
	S[len] = '\0';
	for(int i=0; i<len; i++){
		if(i==len-1 || i==len-2){
			newS[n++] = S[i];
			continue;
		}
		if((S[i]=='g' || S[i]=='G') && (S[i+1]=='z' || S[i+1]=='Z') && (S[i+2]=='u' || S[i+2]=='U')){
			i+=2;
			continue;
		}
		newS[n++] = S[i];
	}
	puts(newS);
	return 0;
}

四、运行结果

 

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值