剑指offer面试题4
来源:互联网 发布:美国eia数据是什么 编辑:程序博客网 时间:2024/05/18 00:27
面试题4: 替换空格
题目:请实现一个函数,把字符串中的每一个空格替换成”%20“。例如,输入”We are happy.“,则输出”We%20are%20happy."。
思路:首先根据先验知识,对字符串空间进行调整,然后把字符串从后先前替换
代码:
#include "stdafx.h"#include <string>/*length 为字符数组string的总容量*/void ReplaceBlank(char string[], int length){ if(string == NULL && length <= 0) //鲁棒性判断 return; /*originalLength 为字符串string的实际长度*/ int originalLength = 0; int numberOfBlank = 0; //空格的个数 int i = 0;//统计字符中空格的个数以及字符长度 while(string[i] != '\0') { ++ originalLength; //字符串长度 if(string[i] == ' ') ++ numberOfBlank; //空格个数 ++ i; } /*newLength 为把空格替换成'%20'之后的长度*/ int newLength = originalLength + numberOfBlank * 2; //替换后的中总长度 if(newLength > length) return; int indexOfOriginal = originalLength; //原始长度 int indexOfNew = newLength; //新的长度 while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal) { if(string[indexOfOriginal] == ' ') //遇到空格向前移到3个字节 { string[indexOfNew --] = '0'; string[indexOfNew --] = '2'; string[indexOfNew --] = '%'; } else { string[indexOfNew --] = string[indexOfOriginal];//字符串向前移动 } -- indexOfOriginal; //向前移到 }}void Test(char* testName, char string[], int length, char expected[]){ if(testName != NULL) printf("%s begins: ", testName); ReplaceBlank(string, length); if(expected == NULL && string == NULL) printf("passed.\n"); else if(expected == NULL && string != NULL) printf("failed.\n"); else if(strcmp(string, expected) == 0) printf("passed.\n"); else printf("failed.\n");}// 空格在句子中间void Test1(){ const int length = 100; char string[length] = "hello world"; Test("Test1", string, length, "hello%20world");}// 空格在句子开头void Test2(){ const int length = 100; char string[length] = " helloworld"; Test("Test2", string, length, "%20helloworld");}// 空格在句子末尾void Test3(){ const int length = 100; char string[length] = "helloworld "; Test("Test3", string, length, "helloworld%20");}// 连续有两个空格void Test4(){ const int length = 100; char string[length] = "hello world"; Test("Test4", string, length, "hello%20%20world");}// 传入NULLvoid Test5(){ Test("Test5", NULL, 0, NULL);}// 传入内容为空的字符串void Test6(){ const int length = 100; char string[length] = ""; Test("Test6", string, length, "");}//传入内容为一个空格的字符串void Test7(){ const int length = 100; char string[length] = " "; Test("Test7", string, length, "%20");}// 传入的字符串没有空格void Test8(){ const int length = 100; char string[length] = "helloworld"; Test("Test8", string, length, "helloworld");}// 传入的字符串全是空格void Test9(){ const int length = 100; char string[length] = " "; Test("Test9", string, length, "%20%20%20");}int _tmain(int argc, _TCHAR* argv[]){ Test1(); Test2(); Test3(); Test4(); Test5(); Test6(); Test7(); Test8(); Test9(); return 0;}
/*********************************7月14日*******************/
// 面试题4.cpp : 定义控制台应用程序的入口点。////面试题4: 替换空格#include "stdafx.h"#include <string.h>void ReplaceBlank(char string[], int length){if( string == NULL || length <= 0)return;int originalLength = 0;int numberOfBlank = 0;int i = 0;while(string[i] != '\0'){++ originalLength; //字符串的长度,不包括'\0'字符if(string[i] == ' ')++ numberOfBlank; //字符串中空格的个数i++;}int newLength = originalLength + numberOfBlank * 2; //新的字符串长度if (newLength > length)return;int indexOfOriginal = originalLength; //作为第一个指针int indexOfNew = newLength; //作为第二个指针while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal) //循环结束条件是什么呢?{if(string[indexOfOriginal] == ' '){string[indexOfNew --] = '0';string[indexOfNew --] = '2';string[indexOfNew --] = '%';}else{string[indexOfNew --] = string[indexOfOriginal];}-- indexOfOriginal; //这个索引在不停的递减}}/*************测试******************///包含空格 中间多个void Test1(){char string[100] = "We are happy";printf("len = %d\n", strlen(string));ReplaceBlank(string,100);printf("%s\n", string);}//包含空格 开始多个void Test2(){char string[100] = " We are happy";printf("len = %d\n", strlen(string));ReplaceBlank(string,100);printf("%s\n", string);}//包含空格 结尾多个void Test3(){char string[100] = " We are happy ";printf("len = %d\n", strlen(string));ReplaceBlank(string,100);printf("%s\n", string);}//不包含空格 void Test4(){char string[100] = "Wearehappy";printf("len = %d\n", strlen(string));ReplaceBlank(string,100);printf("%s\n", string);}//字符串为NULL void Test5(){//char string[100] = "Wearehappy";//printf("len = %d\n", strlen(string));ReplaceBlank(NULL,100);//printf("%s\n", string);}//字符串为空字符串,""void Test6(){char string[100] = ""; //字符串是空字符串""printf("len = %d\n", strlen(string));ReplaceBlank(string,100);printf("%s\n", string);}//字符串只有一个空格字符void Test7(){char string[100] = " "; //字符串是空字符串""printf("len = %d\n", strlen(string));ReplaceBlank(string,100);printf("%s\n", string);}//字符串有连续多个空格字符void Test8(){char string[100] = " "; //字符串是空字符串""printf("len = %d\n", strlen(string));ReplaceBlank(string,100);printf("%s\n", string);}int _tmain(int argc, _TCHAR* argv[]){Test1();Test2();Test3();Test4();Test5();Test6();Test7();Test8();return 0;}
/************************7月14日************************/
// 面试题3_1.cpp : 定义控制台应用程序的入口点。////字符串:常量字符串和字符串数组(P43)#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){char str1[] = "hello world";char str2[] = "hello world";char* str3 = "hello world";char* str4 = "hello world";if(str1 == str2)printf("str1 and str2 are same.\n");elseprintf("str1 and str2 are not same.\n");if(str3 == str4)printf("str3 and str4 are same.\n");elseprintf("str3 and str4 are not same.\n");return 0;}
/*********************相关题目**********************/
// 面试题4-2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"//length是数组A1的总长度,length1是A1的元素实际个数,length2是A2元素实际个数void mergeArray(int* A1, int* A2, int length, int length1, int length2){if(A1 == NULL || A2 == NULL || length1 <= 0 || length2 <= 0)return;int newLen = length1 + length2-1;int p1 = length1-1;int p2 = length2-1;if(newLen > length)return;while(p1 >= 0 && p2 >= 0){if(A1[p1] > A2[p2])A1[newLen--] = A1[p1--];elseA1[newLen--] = A2[p2--];}}/****************测试*******************/void Test1(){int A1[100]={1,3,5,7,10,11,16,20,400};int A2[] = {2,4,6,10,20,45,200};mergeArray(A1,A2,sizeof(A1)/sizeof(int), 9,7);for(int i = 0; i < 16; i++)printf("%d ", A1[i]);printf("\n");}int _tmain(int argc, _TCHAR* argv[]){Test1();return 0;}
0 0
- 剑指offer面试题4
- 剑指offer 面试题4
- 【面试题】剑指offer 4
- 剑指offer面试题4
- 剑指offer面试题4
- 剑指offer面试题4
- 剑指offer 面试题
- 剑指offer面试题
- 剑指offer-->面试题4 替换空格
- 读书笔记-剑指offer面试题4
- 《剑指offer》面试题4 替换空格
- 【剑指offer】面试题4:替换空格
- 【剑指offer】面试题4替换空格
- 剑指offer 面试题4 替换空格
- 剑指Offer:面试题4 替换空格
- 剑指offer-面试题4-替换空格
- 《剑指Offer》面试题4:替换空格
- 《剑指Offer》面试题4习题
- Hive 安装
- 第几天--预处理
- IOS 根据日期,获取该日期所在周,月,年的开始日期,结束日期 的方法
- HTML&CSS学习1——画圣诞树
- linux更改文件夹所有者和读写权限
- 剑指offer面试题4
- POI解析excel2007和生成excel2007
- 数据库 存储过程
- MediaPlayer播放器在web项目中调用
- IMPLEMENT_DYNAMIC
- fastjson工具函数json和java对象相互转化
- 关于Wireshark "The NPF driver isn’t running……"解决办法
- 二叉排序树
- POJ 2229-Sumsets ( 基础DP)