题目:
请实现一个函数,将一个字符串中的空格替换成“%20”。
例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解法:
遍历两次
第一次查找空格数得到处理后的字符长度
第二次从后往前如果不是空格复制到末尾,如果是空格替换字符
#include <iostream>
using namespace std;
char* ReplaceBlank(char string[], int length) {
if (string == nullptr || length < 0) {
return string;
}
int blankNum = 0;
int stringLen = 0;
while (string[stringLen] != '\0') {
if (string[stringLen] == ' ') {
blankNum++;
}
stringLen++;
}
int newStringLen = stringLen + blankNum * 2;
while (stringLen >=0 && stringLen < newStringLen)
{
if (string[stringLen] != ' ') {
string[newStringLen--] = string[stringLen];
}
else
{
string[newStringLen--] = '0';
string[newStringLen--] = '2';
string[newStringLen--] = '%';
}
stringLen--;
}
return string;
}
int main()
{
char string[20] = "hello world";
int row = 0, col = 4;
cout << ReplaceBlank(string, 20);
}
备注:
char string[20] = "hello world";
hello world后面全是\0
- 时间复杂度
O(2n)=O(n)
- 指针类型的可以直接用字符串长度递减来遍历
stringLen--;