From c125e7ebd7e2265fd3fefad67d8b17f47cc2bdad Mon Sep 17 00:00:00 2001 From: Yanlong Wang Date: Sun, 23 Jul 2017 13:11:37 +0800 Subject: [PATCH 1/3] Update ReplaceSpaces.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit if((newLength+1) > length) return; 因为字符串末尾以'\0'结尾,所以newLength+1才是真实的字符数组长度 --- 05_ReplaceSpaces/ReplaceSpaces.cpp | 38 +++++++++++++++--------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/05_ReplaceSpaces/ReplaceSpaces.cpp b/05_ReplaceSpaces/ReplaceSpaces.cpp index dae3293..c753c1e 100644 --- a/05_ReplaceSpaces/ReplaceSpaces.cpp +++ b/05_ReplaceSpaces/ReplaceSpaces.cpp @@ -8,24 +8,24 @@ Distributed under the BSD license. *******************************************************************/ //================================================================== -// ָOfferԹپͱ⡷ -// ߣκ +// 《剑指Offer——名企面试官精讲典型编程题》代码 +// 作者:何海涛 //================================================================== -// 5滻ո -// Ŀʵһַеÿո滻"%20"롰We are happy. -// We%20are%20happy. +// 面试题5:替换空格 +// 题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”, +// 则输出“We%20are%20happy.”。 #include #include -/*length Ϊַstrڻַstrʵʳ*/ +/*length 为字符数组str的总容量,大于或等于字符串str的实际长度*/ void ReplaceBlank(char str[], int length) { if(str == nullptr && length <= 0) return; - /*originalLength Ϊַstrʵʳ*/ + /*originalLength 为字符串str的实际长度*/ int originalLength = 0; int numberOfBlank = 0; int i = 0; @@ -39,9 +39,9 @@ void ReplaceBlank(char str[], int length) ++ i; } - /*newLength Ϊѿո滻'%20'֮ij*/ + /*newLength 为把空格替换成'%20'之后的长度*/ int newLength = originalLength + numberOfBlank * 2; - if(newLength > length) + if((newLength+1) > length) return; int indexOfOriginal = originalLength; @@ -63,7 +63,7 @@ void ReplaceBlank(char str[], int length) } } -// ====================Դ==================== +// ====================测试代码==================== void Test(char* testName, char str[], int length, char expected[]) { if(testName != nullptr) @@ -81,7 +81,7 @@ void Test(char* testName, char str[], int length, char expected[]) printf("failed.\n"); } -// ոھм +// 空格在句子中间 void Test1() { const int length = 100; @@ -90,7 +90,7 @@ void Test1() Test("Test1", str, length, "hello%20world"); } -// ոھӿͷ +// 空格在句子开头 void Test2() { const int length = 100; @@ -99,7 +99,7 @@ void Test2() Test("Test2", str, length, "%20helloworld"); } -// ոھĩβ +// 空格在句子末尾 void Test3() { const int length = 100; @@ -108,7 +108,7 @@ void Test3() Test("Test3", str, length, "helloworld%20"); } -// ո +// 连续有两个空格 void Test4() { const int length = 100; @@ -117,13 +117,13 @@ void Test4() Test("Test4", str, length, "hello%20%20world"); } -// nullptr +// 传入nullptr void Test5() { Test("Test5", nullptr, 0, nullptr); } -// Ϊյַ +// 传入内容为空的字符串 void Test6() { const int length = 100; @@ -132,7 +132,7 @@ void Test6() Test("Test6", str, length, ""); } -//Ϊһոַ +//传入内容为一个空格的字符串 void Test7() { const int length = 100; @@ -141,7 +141,7 @@ void Test7() Test("Test7", str, length, "%20"); } -// ַûпո +// 传入的字符串没有空格 void Test8() { const int length = 100; @@ -150,7 +150,7 @@ void Test8() Test("Test8", str, length, "helloworld"); } -// ַȫǿո +// 传入的字符串全是空格 void Test9() { const int length = 100; From 59b981149d431ceea1bc1a32b4e2618a0fcd8064 Mon Sep 17 00:00:00 2001 From: Yanlong Wang Date: Tue, 29 Aug 2017 13:23:19 +0800 Subject: [PATCH 2/3] Compiler error: memset was not declared in this scope MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I am trying to compile this C++ program in Ubuntu 16.4, but I am getting this error: error: ‘memset’ was not declared in this scope. So, I think you should include (or its C++ equivalent, ). --- .../Print1ToMaxOfNDigits.cpp | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/17_Print1ToMaxOfNDigits/Print1ToMaxOfNDigits.cpp b/17_Print1ToMaxOfNDigits/Print1ToMaxOfNDigits.cpp index d3d6182..6e1fa3a 100644 --- a/17_Print1ToMaxOfNDigits/Print1ToMaxOfNDigits.cpp +++ b/17_Print1ToMaxOfNDigits/Print1ToMaxOfNDigits.cpp @@ -8,22 +8,23 @@ Distributed under the BSD license. *******************************************************************/ //================================================================== -// ָOfferԹپͱ⡷ -// ߣκ +// 《剑指Offer——名企面试官精讲典型编程题》代码 +// 作者:何海涛 //================================================================== -// 17ӡ1nλ -// Ŀn˳ӡ1nλʮ3 -// ӡ123һֱ3λ999 +// 面试题17:打印1到最大的n位数 +// 题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则 +// 打印出1、2、3一直到最大的3位数即999。 #include #include +#include void PrintNumber(char* number); bool Increment(char* number); void Print1ToMaxOfNDigitsRecursively(char* number, int length, int index); -// ====================һ==================== +// ====================方法一==================== void Print1ToMaxOfNDigits_1(int n) { if (n <= 0) @@ -41,8 +42,8 @@ void Print1ToMaxOfNDigits_1(int n) delete[]number; } -// ַnumberʾһ֣ number1 -// ӷ򷵻trueΪfalse +// 字符串number表示一个数字,在 number上增加1 +// 如果做加法溢出,则返回true;否则为false bool Increment(char* number) { bool isOverflow = false; @@ -76,7 +77,7 @@ bool Increment(char* number) return isOverflow; } -// ======================================== +// ====================方法二==================== void Print1ToMaxOfNDigits_2(int n) { if (n <= 0) @@ -109,9 +110,9 @@ void Print1ToMaxOfNDigitsRecursively(char* number, int length, int index) } } -// ======================================== -// ַnumberʾһ֣ɸ0ͷ -// ӡ֣Կͷ0 +// ====================公共函数==================== +// 字符串number表示一个数字,数字有若干个0开头 +// 打印出这个数字,并忽略开头的0 void PrintNumber(char* number) { bool isBeginning0 = true; @@ -131,7 +132,7 @@ void PrintNumber(char* number) printf("\t"); } -// ====================Դ==================== +// ====================测试代码==================== void Test(int n) { printf("Test for %d begins:\n", n); From 50525d54f4c6ec616a12328afcd7a59d5845aa48 Mon Sep 17 00:00:00 2001 From: Yanlong Wang Date: Mon, 11 Sep 2017 12:09:53 +0800 Subject: [PATCH 3/3] Update StreamMedian.cpp int/int is int ,not a float. --- 41_StreamMedian/StreamMedian.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/41_StreamMedian/StreamMedian.cpp b/41_StreamMedian/StreamMedian.cpp index 84624c6..4ae4d79 100644 --- a/41_StreamMedian/StreamMedian.cpp +++ b/41_StreamMedian/StreamMedian.cpp @@ -8,14 +8,14 @@ Distributed under the BSD license. *******************************************************************/ //================================================================== -// ָOfferԹپͱ⡷ -// ߣκ +// 《剑指Offer——名企面试官精讲典型编程题》代码 +// 作者:何海涛 //================================================================== -// 41еλ -// Ŀεõһеλжֵô -// λֵ֮λмֵжżֵ -// ôλֵ֮мƽֵ +// 面试题41:数据流中的中位数 +// 题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么 +// 中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值, +// 那么中位数就是所有数值排序之后中间两个数的平均值。 #include #include @@ -73,7 +73,7 @@ template class DynamicArray if((size & 1) == 1) median = min[0]; else - median = (min[0] + max[0]) / 2; + median = (min[0] + max[0]) / 2.0; return median; } @@ -83,7 +83,7 @@ template class DynamicArray vector max; }; -// ====================Դ==================== +// ====================测试代码==================== void Test(char* testName, DynamicArray& numbers, double expected) { if(testName != nullptr)