【题目】
给定一个字符串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’的时候,这样就省了一重循环,而且便于实现。但是采用这种思想需要注意在循环之外还需要再判断下是否存在满足条件的情况。