剑指offer刷题之c++实现的替换空格
2015-08-08 12:14
447 查看
#include<stdio.h> /* 将字符串中的空格替换成%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<stdio.h> /* 本例子是替换空格的拓展。共同点都是从数组的尾部开始,因为有序,所以这样减少比较和复制的次数 有两个排序的数组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<len;i++){ printf("arr[%d] = %d\n",i,arr[i]); } } int main(){ int a[] = {1,5,7,9},b[] = {3,5,8}; int alen=sizeof(a)/sizeof(int); int blen=sizeof(b)/sizeof(int); print(a,alen); combine2Array(a,b,alen,blen); printf("\n"); print(a,alen); return 1; }
相关文章推荐
- 剑指offer刷题之c++实现的求链表中倒数第k个值
- C++数组
- Leetcode -- Roman to Integer
- C++设计模式——单例模式
- 用最小最大的两个数交换首尾两数
- Caesar cipher
- c++ stl string char* 向 string 转换的问题
- C/C++程序基础
- C++静态库和动态库
- 分数相加减的代码(c++)
- c++自定义string类
- 牛客网(搜狗2015 C++工程师笔试题)
- [C++11 并发编程] 04 - 动态选择并发线程的数量
- C++连接mysql数据库的两种方法
- 【C++基础之一】C++ 虚函数表解析
- C/C++(链表应用)笔记——使用链表进行多项式的合并
- C++ 虚函数实现多态浅析
- C++面向对象--类
- C++中如何控制输出的格式
- 【C++智能指针 auto_ptr】