字符串反转操作,网易的一道面试题
2012-05-07 15:19
483 查看
/**
*函数实现将网址进行如下操作
*www.google.com转成com.google.www 及mail.netease.com转成com.netease.mail
*
*不允许用STL,空间为0(1)
*
*C/C++ code
*
*void reverse(cha * ptr)
*{
*
*
*}
*
*
**/
*函数实现将网址进行如下操作
*www.google.com转成com.google.www 及mail.netease.com转成com.netease.mail
*
*不允许用STL,空间为0(1)
*
*C/C++ code
*
*void reverse(cha * ptr)
*{
*
*
*}
*
*
**/
char* find_next_right_dot(char *str) { if(str == NULL) return NULL; char * src = str; //save the source string address while(*src) { if(*src++ == '.' && *src != '.' && *src != '\0') { //if the first char is dot and the follow char is not, and the string dont end with //0, get the char address after the last dot. return src; } } return NULL; } int find_first_dot(char *str) { if(str == NULL) return -1; if(*str != '.') return 0; char *src = str; while(*src) { if(*src++ == '.' && *src != '.') return (int)(src - str); } return 0; } void reverse(char *begin, char *end) { if(NULL == begin || end == NULL) return; char *tmp1 = begin; char *tmp2 = end; char a; while(tmp2 > tmp1) { a = *tmp1; *tmp1++ = *(tmp2); *tmp2-- = a; } } void reverse_by_dot(char *str) { if(NULL == str) return; char *des = str; int firstdot = find_first_dot(str); des += firstdot; while(1) { if(*des++ == '.' && *des != '\0') { char *tmp = str + firstdot; char *dotstr = des - 2;//roll back to the char is not dot reverse(tmp, dotstr); //reverse the string from tmp to dotstr if(find_next_right_dot(dotstr)) { des = find_next_right_dot(dotstr); firstdot = des - str; } else { firstdot = des + 1 - str; } } if(*des == '\0') { // has reached the end of string des char *tmp = str + firstdot; char *dotstr = des - 1; reverse(tmp, dotstr); break; } } }
int main(void) { char *str = "neteasy.google.com"; printf("%s\n", str); reverse(str, str + strlen(str) - 1); printf("reverse: %s\n", str); reverse_by_dot(str); printf("reverse_by_dot: %s\n", str); char *str1 = "...hello...world..."; printf("\n%s\n", str1); reverse(str1, str1 + strlen(str1) - 1); printf("reverse: %s\n", str1); reverse_by_dot(str1); printf("reverse_by_dot: %s\n", str1); char *str2 = "hello world"; printf("\n%s\n", str2); reverse(str2, str2 + strlen(str2) - 1); printf("reverse: %s\n", str2); reverse_by_dot(str2); printf("reverse_by_dot: %s\n", str2); return 0; }
相关文章推荐
- 由字符串反转(使用递归)引申出来一道Java面试题
- 由字符串反转(使用递归)引申出来一道Java面试题
- 一道关于字符串操作的面试题
- 由字符串反转(使用递归)引申出来一道Java面试题
- 关于一道面试题,使用C#实现字符串反转算法
- 关于一道面试题,使用C#实现字符串反转算法
- 网易面试题之暗黑字符串
- 一道字符串面试题:很少有人可以快速准确做出来
- 字符串去空格以及反转操作演示样例
- 一道微软面试时碰到的,经典的,关于字符串操作的面试题目
- 网易面试题之 牛牛拿到了一个藏宝图,顺着藏宝图的指示,牛牛发现了一个藏宝盒,藏宝盒上有一个机关,机关每次会显示两个字符串 s 和 t, * 根据古老的传说,牛牛需要每次都回答 t 是否是 s 的子序
- Java实现的简单字符串反转操作示例
- 华为(2007年3月)一道面试题: c语言删除一个字符串中的第i个字符后的j个字符
- 面试题:把字符串“I am a student”反转成为“student a am I”,不借助任何库函数。
- 一道面试题:从一个字符串中找出第一个不重复字符;算法一;
- 网易的一道面试题
- 某讯一道面试题,用C提取字符串,分隔符为空格
- 网易面试题之暗黑字符串
- C语言中常用的字符串操作(子串分割、替换、去前后空格、递归实现字符串反转)
- 面试题42反转单词顺序VS左旋字符串(循环左移字符串)