剑指offer刷题之c++实现的替换空格

#include 
/*
将字符串中的空格替换成%20 
*/ 
void replaceBlank(char *str,int length){
	 int i=0,count=0,j=0;
        while(str[i]!='\0'){
            if(str[i] == ' ')
                count++; 
                i++; 
        }       
       
        j=i+count*2; 
        str[j--] = '\0';
         i--;
        while(i>=0&&j>0){
            if(str[i]!=' ')
                str[j--] = str[i];
            else{
              	 str[j--]='0';
               	 str[j--]='2';
                 str[j--]='%';
            }
            i--;
        }
    }
	
int main(){
	char s[] = "hello world! ";
	printf("%s\n",s); 
	replaceBlank(s,13);
	printf("?%s? ",s);
	return 1;
}


拓展:合并有序数组

#include 
/*
本例子是替换空格的拓展。共同点都是从数组的尾部开始,因为有序,所以这样减少比较和复制的次数
有两个排序的数组A1和A2.其中A1有足够多的空间容纳A2,要求融合后的数组仍然是有序的 
*/ 
void print(int arr[],int len);
void combine2Array(int *a,int *b,int alen,int blen){
	int i=alen-1,j=blen-1,len;
	//因为数组不是字符串数组,没有'\0'作为结尾的标志位。故必须在传参数时传进来 
	/*!while(a[i]!='\0'){	
		i++;
	} 
	while(b[j]!='\0'){	
		j++;
	} 
	len = i+j;
	printf("i=%d, j=%d, len=%d",i,j,len);*/
	len = alen+blen;
//!	a[len] = '\0';
	len--;
	while(i>=0 || j>=0){
		if(i>=0 && j>=0) {
			if(a[i] >b[j]){
				a[len] = a[i];
				i--;
			}
			else {
				a[len] = b[j];
				j--;
			}
			
			//!a[len] = a[i]>b[j]?a[i]:b[j];
			printf("%d ",a[len]);
			//!i--;
			//!j--;
		}
	   else	if(i>=0) {
			a[len] =a[i];
			printf("%d ",a[len]);
			i--;
		}
		else  {
			a[len] = b[j];
			printf("%d ",a[len]);
			j--; 
		}		
		len--;		 
	}
	
}
void print(int arr[],int len){
	int i=0;

	for(i=0;i


你可能感兴趣的:(算法)