1. 题目
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy
2. 代码思路
vector replaceFun(vector arrData)函数用来实现替换
- 在容器中计算数组长度N
- 计算空格个数M,新数组长度=N+M*2,
- 找到空格位置,将数据后移两位,插入%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;
}