5.3 去掉字符串中连续出现k个0的子串

给定字符串str和整数k,若str中有连续k个'0',则将其去掉。例如,str='A00B', k=2,处理后变为'AB'; str='A0000B000', k=3,则变为'A0000B'。实现时需注意输入检查,如k小于1则直接返回str。可以原地修改字符串,但要注意处理'0'时要赋值为0(ASCII码0表示NULL)。" 111640452,10324895,软件项目失败的20个常见原因,"['项目管理', '软件开发', '技术选型', '团队协作', '市场分析']
摘要由CSDN通过智能技术生成

【题目】

  给定一个字符串str和一个整数k,如果str中正好有连续的k个'0'字符出现时,把k个连续的'0'去掉,返回处理后的字符串。

【举例】

  str = "A00B",k = 2,返回"AB";

  str = "A0000B000",k = 3,返回"A0000B";


【实现】


#include <iostream>
#include <string>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	string str;
	int k;
	getline(cin, str);
	cin >> k;
	if (str == "" || str.size() == 0||k<1)
	{
		cout << str<< endl;
		return 0;
	}
	int count = 0;
	string str1;
	for (int i = 0; i < str.size(); i++)
	{
		if (str[i] != '0')
		{			
			if (count != k)
			{
				for (int j = 0; j < count; j++)
					str1 += '0';
			}
			str1 += str[i];
			count = 0;
		}
		else
		{
			count++;
		}
	}
	if (count != k)
	{
		for (int j = 0; j < count; j++)
			str1 += '0';
	}
	cout << str1 << endl;
	return 0;
}


【知识点】

1、首先在输入检查时忘记了检查输入的k,还有对于输入检查满足时应该返回什么也得记着思考一下,比如本题中如果输入的str是空或者说k小于1,那么就没必要再去‘0’了,所以直接返回str就好。

2、本题也可以在原串的基础上进行去‘0’操作,这样省的在申请一个额外的str用来保存去‘0’之后的串。但是需要注意如果在原串上直接去0,那么当满足去‘0’条件时,应该给str[i]赋值为0,因为在ASCII码表中0表示NULL。

3、做本题就借鉴了5.2中的思想,即去掉连续‘0’的时机放在字符不是‘0’的时候,这样就省了一重循环,而且便于实现。但是采用这种思想需要注意在循环之外还需要再判断下是否存在满足条件的情况

















































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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值