剑指offer_2_数组

1. 题目

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy

2. 代码思路

vector replaceFun(vector arrData)函数用来实现替换

  1. 在容器中计算数组长度N
  2. 计算空格个数M,新数组长度=N+M*2,
  3. 找到空格位置,将数据后移两位,插入%20三个字符

vector pushData()函数用来将检测数据输入井进vector中
void testFun(vector arr)函数是测试函数
(注意,文内以文件形式输入数组,因此在执行时需要在代码文件夹下创建一个数据文件)

3. 代码

#include<iostream>
#include<vector>
using std::vector;
using namespace std;
vector<char> replaceFun(vector<char> arrData)//函数头不可更改
{
 	int count = 0,num,length;
 	length = arrData.size();
 	for (int i = 0; i < arrData.size(); ++i)
 	{
  		if (arrData[i] == ' ')count++;//记录数据中存在多少空格
 	}
 	num = arrData.size() + (count*2);//计算改变后容器应该有的长度
 	arrData.resize(num);//重置数组长度
 	for (int i = 0; i < length; ++i)
 	{
  		if (arrData[i] == ' ')//如果该位置处为空格,则执行替换
  		{
   	//先将数组元素后移两个位置,给2 0 空位置
   			for (int j = length; j > i; --j)
   			{
    				arrData[j + 2] = arrData[j];
    				arrData[j + 1] = arrData[j-1];
   			}
   			//将i、i+、i+2处替换为空格
   			arrData[i] = '%';
   			arrData[i + 1] = '2';
   			arrData[i + 2] = '0';
  		}
	 }
 	return arrData;
}
vector<char> pushData()
{
 	vector<char> charArr;
 	FILE* fp;
 	fp = fopen("charFile.txt", "r");
 	//if (fp == nullptr)return false;
 	while (!feof(fp))//文件为空,eof为真
 	{
 	 	char ch = fgetc(fp);
  		charArr.push_back(ch);//给容器压入一个数据
 	}
 	return charArr;
 	fclose(fp);
}
void printFun(vector<char> arr)
{
 	FILE* fp;
 	fp = fopen("charFile.txt", "a");
 	for (int i = 0; i < arr.size(); ++i)
 	{
  		fputc(arr[i], fp);
  		//cout << arr[i];
 	}
 	fclose(fp);
}
int main()
{
 	printFun(replaceFun(pushData()));//将pushData函数产生的vector<int>数组传递给replaceFun函数,所产生的数组传递给printFun()函数
 	cin.get();
 	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值