面试题4:替换空格
2016-07-01 11:19
309 查看
知识点
C/C++中的每个字符串都以字符'\0'作为结尾为了节省内存,C/C++把常量字符串放到单独的一个内存区域,当几个指针赋值给相同的常量字符串,它们实际会指向相同的地址
char str1[] = "hello"; char str2[] = "hello"; char *str3 = "hello"; char *str4 = "hello";
// ReplaceBlank.cpp : Defines the entry point for the console application. // // 《剑指Offer——名企面试官精讲典型编程题》代码 // 著作权所有者:何海涛 #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] == ' ') { 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"); } // 传入NULL void 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; }
View Code
相关文章推荐
- 优秀程序员必备的七点
- 优秀程序员必备的7点
- 单链表的相关面试题
- 学习面试题Day09
- 十大编程算法助程序员走上高手之路
- IT不容易
- 现在都用今日面试网站找工作了!
- 面试题3:二维数组中的查找
- 2016Android某公司面试题
- Android面试一天一题(吹牛题)
- Java高级开发工程师面试考纲
- 成为优秀程序员必备的七点
- Android面试一天一题(16 Day: 线程同步)
- Android面试一天一题(15 Day:ContentProvider)
- Android面试一天一题(14 Day:SharedPreferences)
- Android面试一天一题(13 Day: AsyncTask)
- Android面试一天一题(12 Day)
- Android面试一天一题(11 Day)
- Android面试一天一题(10 Day)
- Android面试一天一题(9 Day)