JZ-C-42
剑指offer第四十二题:翻转单词顺序:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变
1 //============================================================================ 2 // Name : JZ-C-42.cpp 3 // Author : Laughing_Lz 4 // Version : 5 // Copyright : All Right Reserved 6 // Description : 翻转单词顺序:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变 7 //============================================================================ 8 9 #include <iostream> 10 #include <stdio.h> 11 #include "StringUtil.h" 12 #include <string.h> 13 using namespace std; 14 15 char* ReverseSentence(char *pData) { 16 if (pData == NULL) 17 return NULL; 18 19 char *pBegin = pData; 20 21 char *pEnd = pData; 22 while (*pEnd != '\0') 23 pEnd++; 24 pEnd--; 25 26 // 翻转整个句子 27 Reverse(pBegin, pEnd); 28 29 // 翻转句子中的每个单词 30 pBegin = pEnd = pData; 31 while (*pBegin != '\0') { 32 if (*pBegin == ' ') { 33 pBegin++; 34 pEnd++; 35 } else if (*pEnd == ' ' || *pEnd == '\0') { 36 Reverse(pBegin, --pEnd); 37 pBegin = ++pEnd; 38 } else { 39 pEnd++; 40 } 41 } 42 43 return pData; 44 } 45 46 // ====================测试代码==================== 47 void Test(char* testName, char* input, char* expectedResult) { 48 if (testName != NULL) 49 printf("%s begins: ", testName); 50 51 ReverseSentence(input); 52 53 if ((input == NULL && expectedResult == NULL) 54 || (input != NULL && strcmp(input, expectedResult) == 0)) 55 printf("Passed.\n\n"); 56 else 57 printf("Failed.\n\n"); 58 } 59 60 // 功能测试,句子中有多个单词 61 void Test1() { 62 char input[] = "I am a student."; 63 char expected[] = "student. a am I"; 64 65 Test("Test1", input, expected); 66 } 67 68 // 功能测试,句子中只有一个单词 69 void Test2() { 70 char input[] = "Wonderful"; 71 char expected[] = "Wonderful"; 72 73 Test("Test2", input, expected); 74 } 75 76 // 鲁棒性测试 77 void Test3() { 78 Test("Test3", NULL, NULL); 79 } 80 81 // 边界值测试,测试空字符串 82 void Test4() { 83 Test("Test4", "", ""); 84 } 85 86 // 边界值测试,字符串中只有空格 87 void Test5() { 88 char input[] = " "; 89 char expected[] = " "; 90 Test("Test5", input, expected); 91 } 92 93 int main(int argc, char** argv) { 94 Test1(); 95 Test2(); 96 Test3(); 97 Test4(); 98 Test5(); 99 100 return 0; 101 }
—————————————————————————————————————行走在人猿的并行线——Laughing_Lz