文章

4

粉丝

135

获赞

11

访问

24.3k

头像
思路简单-实现要注意细节
P1027 贵州大学2019机试
发布于2022年8月2日 18:13
阅读数 5.5k

思路分析

本题解采用两个字符数组的解法,将符合条件的字符添加的新数组中,最后输出新数组即可

首先,按顺序,如果字符等于g z u三者的一个(含大写),则计数器cnt数值++,直到cnt==3,表示gzu三个字符连续出现,此时它们不会被添加到新数组中;

其次,如果发现没有连续出现gzu,而是出现了g或者gz,则需要将这两个字符添加到新字符数组中,并将计数器cnt的值赋值为0;

最后一种情况,字符不属于g z u连续出现的情况,直接添加即可。

代码如下:

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;

char str[5] = {'g', 'z', 'u'};

int main()
{
	char s[105];
	char s1[105];
	int cnt = 0, j=0;
	gets(s);
	int len = strlen(s);
	int len1 = 0;
	
	for (int i=0; i<len; i++){
		len1 = len - i + 1;
		
		// 符合g z u三个字母的情况 
		if ((s[i] == str[cnt] || s[i] == (str[cnt] - 32)) && len1 >= 3){
			cnt++;
			if (cnt == 3){
				cnt = 0;
			}
		}
		
		// 不是连续出现g z u的情况,需要将之前略过的字母补上 
		else if (cnt > 0 && s[i] != str[cnt] && s[i] != (str[cnt]-32)){
			while(cnt>0){
				s1[j++] = s[i-cnt];
				cnt--;
			}
			i--;
		}
		
		// 正常情况,直接添加到新字符数组即可 
		else{
			s1[j++] = s[i];
		}
	}
	
	puts...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发