最近找实习,要面试各种公司,据说这题在笔试或者面试当中,出现的频率非常高
//写一个函数,将字符串翻转,翻转方式如下:“I am a student”反转成“student a am I”,不借助任何库函数。
我自己写了个实现:
/*
*将字符串翻转
*翻转方式如下:“I am a student”反转成“student a am I”
*
*方法:
*先反转整个字符串,然后再反转字串。
*譬如先将“I am a student”反转为“tneduts a ma I”,
*然后再对每个字串(空格分割)反转一次。
*空间复杂度O(1),时间复杂度O(n)
*/
int main(int argc, char* argv[])
{
char src[] = "you are a student!";
char* begin = src;
char* end = src;
while(*end != '\0')
++end;
--end;
char tmp;
while(begin < end)
{
tmp = *begin;
*begin = *end;
*end = tmp;
++begin;
--end;
}//reverse all
char* index = src;
while(true)
{
begin = index;
while(*index != '\0' && *index != ' ')
++index;
end =index-1;
if(*index != '\0')
++index;
while(begin < end)
{
tmp = *begin;
*begin = *end;
*end = tmp;
++begin;
--end;
}
if(*index == '\0')
break;
}
printf(src);
printf("\n");
return 0;
}
另外下面是《程序员面试宝典》的代码,一起贴在下面:
#include <iostram>
#include <stdio.h>
int main(void)
{
int num=-12345,j=0,i=0,flag=0,begin,end;
char str[]="I am a student",temp;
j=strlen(str)-1;
printf(" string=%s\n",str);
//第一步是进行全盘反转,将单词变成“tneduts a ma I”
while(j>i)
{
temp=str[i];
str[i]=str[j];
str[j]=temp;
j--;
i++;
}
printf(" string=%s\n",str);
int i=0;
//第二步进行部分反转,如果不是空格则开始反转单词
while(str[i])
{
if(str[i]!=' ')
{
begin=i;
while(str[i]&&str[i]!=' ')
{
i++;
}
i=i-1;
end=i;
}
while(end>begin)
{
temp=str[begin];
str[begin]=str[end];
str[end]=temp;
end--;
begin++;
}
i++;
}
printf(" string=%s\n",str);
return 0;
}