这个既然有人笔试完就问,那我还是敲一份分享一下吧。
题目大意:字符串的问题,把字符串按点的位置翻转。要求时间复杂度O(n)、空间复杂度O(1)。
例如:对于字符串 "www.hyzhou.com.cn" 输出 "cn.com.hyzhou.www"
代码简单明了,就不写注释了,是在看不懂,自己调试运行看看过程就懂了。
#include <stdio.h> void swap( char &a, char &b ) { char c = a; a = b; b = c; } char* reverse( char* src, int start, int end ) { for( int i=start, j=end; i<j; i++, j-- ) swap( src[i], src[j] ); return src; } char* reverse( char* src ) { int start, end; for( end=0, start=0; src[end]!='\0'; end++ ) { if( src[end+1]=='.' || src[end+1]=='\0' ) { reverse( src, start, end ); start = end+2; } } reverse( src, 0, end-1 ); return src; } int main() { char s[] = "www.hyzhou.com.cn"; reverse(s); printf( "%s\n", s ); }