void Test1()
{
//请实现一个函数,把字符串中的每个空格替换成%20
//例如输入“we are happy”,输出“we%20are%20happy”
char arr[20] ="we are happy";
int size = sizeof(arr)/sizeof(arr[0]);
Replace(arr,strlen(arr),size);
printf("%s\n",arr);
}
void Replace(char* arr,int length,int size)//从后往前赋值
{
int i = 0;
int count = 0;
int newlength = 0;
int cur = 0;
int prev = 0;
assert(arr);
assert(length);
while (arr[i] != '\0')
{
if (arr[i] == ' ')
{
count++;
}
i++;
}
newlength = length + count*2;
if (newlength > size)
{
return;
}
cur = length;
prev = newlength;
while (prev >= 0 && prev > cur)
{
if (arr[cur] == ' ')
{
arr[prev--] = '0';
arr[prev--] = '2';
arr[prev--] = '%';
}
else
{
arr[prev--] = arr[cur];
}
cur--;
}
}
相关题目
void Test2()
{
//有两个排序的数组arr1和arr2,内存在arr1的末尾有足够多的空余空间容纳arr2,
//请实现一个函数,把arr2中所有的数字插入到arr1中并且所有的数字任然有序
int i = 0;
int arr1[20] = {1,2,3,5,7,9};
int arr2[] = {2,4,6,8,9,10};
int size1 = sizeof(arr1)/sizeof(arr1[0]);
int size2 = sizeof(arr2)/sizeof(arr2[0]);
TwoOrderArrSort(arr1,arr2,size1,size2);
for (i = 0;i < size1; i++)
{
printf("%d ",arr1[i]);
}
printf("\n");
}
void TwoOrderArrSort(int* arr1,int* arr2,int size1,int size2)
{
int i = 0;
int j = 0;
int k = 0;
int NewSize1 = 0;
int NewLength1 = 0;
assert(arr1);
assert(arr2);
assert(size1);
assert(size2);
while (arr1[k])
{
NewSize1++;
k++;
}
NewLength1 = NewSize1 + size2 - 1;
i = NewSize1-1;
j = size2-1;
if (NewLength1 > size1-1)
{
return;
}
while (NewLength1 >= 0 && i >= 0 && j >= 0)
{
if (arr1[i] >= arr2[j])
{
arr1[NewLength1--] = arr1[i];
i--;
}
else//arr1[i] < arr2[j]
{
arr1[NewLength1--] = arr2[j];
j--;
}
}
while (i>0)
{
arr1[NewLength1--] = arr1[i--];
}
while(j>0)
{
arr2[NewLength1--] = arr2[j--];
}
}