#include <stdio.h>
#include "String.h"
int ReplaceBlank(char * str,long length){
//length 为数组的最大容量
int blankNumber = 0;
int originalLength = 0;
int i=0;
while (str[i] != '\0') {
originalLength++;
if (str[i] == ' ') {
blankNumber++;
}
++i;
}
int newLength = originalLength + blankNumber * 2;
if(newLength > length)
return 0;
//因为需要把原数组中最后一位‘\0’也一起复制的,所以这里没有减一;
int indexOfOriginal = originalLength;
int indexofNew = newLength;
while(indexOfOriginal>=0 && (indexOfOriginal<indexofNew)){
if (str[indexOfOriginal] == ' ') {
str[indexofNew--] = '0';
str[indexofNew--] = '2';
str[indexofNew--] = '%';
}else{
str[indexofNew--] = str[indexOfOriginal];
}
--indexOfOriginal;
}
return 1;
}
int main(int argc, const char * argv[]) {
char str[100] ;//= "hello world ";
scanf("%[^\n]",str);
//str[strlen(str)] = '\0';
ReplaceBlank(str,100);
printf("%s\n",str);
return 0;
}
拓展:a1,b1是已经排完大小元素的数组,把a1和b1高效的合成一个数组
#include<stdio.h>
void fun(int a[],int len1,int b[],int len2)
{
int len = len1+len2;
len--;
len1--;
len2--;
while(len1>=0 && len2>=0){
if(a[len1]>=b[len2]){
a[len--] = a[len1--];
}else{
a[len--] = b[len2--];
}
}
//如果len2有剩余的话,则把剩余的元素移动到a
while (len2>=0) {
a[len--] = b[len2--];
}
//len1剩余,证明已经排好
}
int main(){
int a[10] = {2,3,4,311};
int b[6] = {};
int len1 = 4;
int len2 = 0;
fun(a,len1,b,len2);
for (int i=0;i<len1+len2;i++)
{
printf("%d ",a[i]);
}