某同学在网上留的笔试题如下:
函数实现将网址进行如下操作
www.google.com转成com.google.www 及mail.netease.com转成com.netease.mail
不允许用STL,空间为0(1)
思路如下:
1.先对每个被'.'隔开的单词都逆序一次。
2.对整个串再逆序一次。
void reverse(char * ptr)
{
int i = 0;
int last_mark = -1;
while(ptr[i] != '/0')
{
if(ptr[i] == '.')
{
reverse_word(ptr,last_mark+1,i-last_mark-1);
last_mark = i;
}
++i;
}
reverse_word(ptr,last_mark+1,i-last_mark-1);
//再次对整个串逆转
reverse_word(ptr,0,i);
}
int main()
{
char str[50];
memset(str,0,sizeof(str));
strcpy(str,"mail.netease.com");
printf("%s/n",str);
reverse(str);
printf("%s",str);
return 0;
}
为了表达清晰,把逆序的代码封成函数。申请了3个变量,复杂度为O(1),当然如果对指针操作,而不是操作下标,变量使用更少,不过不必纠结这些细节。