关于字符串的经典问题
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://bluefish.blog.51cto.com/214870/68535 |
同样是出自《程序员面试攻略》的几个经典问题,是关于字符串的。
问题1:编写一个高效函数,从一个字符串中删除一些字符(这些要删除的字符组成一个小字符串,它包含的任何字符都要从原字符串中删除)。
[分析:利用一个数组,该数组的下标为字符的ASCII值,来存储字符的状态,如果是要被删除的字符,则相应的数组元素置为true。然后通过遍历这个原字符串,对其中的每个字符检查其对应数组元素的状态。此处状态数组可理解为一种hash关系] void RemoveChars(char * str, char * remove) { int len = strlen(remove); int i = 0, pos = 0; for(i = 0; i < len; i++) { flags[(int)remove[i]] = true; } i = 0;
len = strlen(str); while(i < len) { if(!flags[(int)str[i]]) { str[pos++] = str[i]; } i++; } } 问题2:编写一个函数,反转一个字符串中单词的顺序。“hello world!”-->“world!hello”
[分析:大体思路为先将待处理字符串整体反转,意思为最后一个字符与第一个字符互换,依次类推。然后在从头查找每一个单词,对每个单词进行反转操作] void ReverseString(char str[], int start, int end) { char temp; while(end > start) { temp = str[start]; str[start] = str[end; str[end] = temp; start++; end--; } } void ReverseWords(char str[]) { int start = 0, end = 0, length; length = strlen(str); ReverseString(str, start, length-1); while( end < length) { if(str[end] != ' ') { start = end; while(end < length && str[end] != ' ') { end++; } end--; ReverseString(str, start, end); } end++; } } 本文出自 “bluefish” 博客,请务必保留此出处http://bluefish.blog.51cto.com/214870/68535 本文出自 51CTO.COM技术博客 |


rightsoft
博客统计信息
热门文章
最新评论
友情链接