字符串
面试题五:替换空格
#include<iostream>
using std::cout;
/**
* 把字符串的空格替换为"%20"
* 注意两种场景:1)在原来的字符串上进行替换;2)创建新的字符串,并在新的字符串上修改
* 本代码是在原来字符串上进行替换
*/
void ReplaceBlank(char string[], int length) //length是字符串数组的总容量
{
if (string == NULL || length <= 0) {
return;
}
int originalLength = 0; //字符串string的实际长度
int numberOfBlank = 0;
int i = 0;
while (string[i] != '\0') {
originalLength ++;
if (string[i] == ' ') {
numberOfBlank++;
}
i++;
}
int newLength = originalLength + numberOfBlank * 2;
if (newLength > length) {
return;
}
int indexOfOrigin = originalLength;
int indexOfNew = newLength;
while (indexOfOrigin >= 0 && indexOfNew > indexOfOrigin) {
if (string[indexOfOrigin] == ' ') {
string[indexOfNew--] = '0';
string[indexOfNew--] = '2';
string[indexOfNew--] = '%';
} else {
string[indexOfNew--] = string[indexOfOrigin];
}
--indexOfOrigin;
}
}
int main()
{
char string[] = "We are happy.";
ReplaceBlank(string,20);
cout << string;
return 0;
}
相关题目:
有两个排序的数组A1和A2,内存在A1 的末尾有足够的空间容纳A2。请实现一个函数,把A2中的所有数字插入到A1 中,并且所有数字是有序的。
类似:【LeetCode】Merge Sorted Array
从后往前填充!!!
1、当两个数组都有元素的时候,填充大的末尾,如果有一个数组的数用完了,说明剩下的所有数都小于当前的填充位置;
2、如果第一个数组用完,说明剩下的全是数组A2,把数组A2全部填充进去就可以了;
3、如果是第二个数组用完,说明剩下的全是数组A1,不用填充,因为数组A1已经存在了。
void merge(int nums1[], int m, int nums2[], int n)
{
int i = m-1, j = n-1, writeIdx = m+n-1;
while (i >= 0 && j >= 0) {
nums1[writeIdx--] = nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
}
while (j >= 0) {
nums1[writeIdx--] = nums2[j--];
}
}