要求:
给定一个字符串x, 位置i,把位置i后的字串搬到这个字符串的开头。比如x = abcdefg 如果i = 4,那么结果就是
efgabcd. 但要求使用递归实现,而且不用额外的空间(也就是说不能另外开个数组,因为x可能会很长这样的话很费空间)。
此为某tx的面试题,基本思路:使用两个计数器,记录将要被移动的字符的位置和已经移动好的字符个数,每次递归移动一个字符到字符串首部。 不过效率感觉很低,虽然未使用new/malloc分配额外的内存。
如果你有更好的方法,欢迎ps, :)
#include <string.h>
#include <stdio.h>
int moveString(char* pStrSrc, int pos)
{
// overflow
if (strlen(pStrSrc) < pos)
return -1;
// at the beginning or end , return
if (pos == 0 || pos == strlen(pStrSrc))
return 0;
printf("\ns=%s------------pos=%d\n",pStrSrc, pos);
static int j = 0;
char t = pStrSrc[pos];
for(int i=pos;i>j;i--)
pStrSrc[i] = pStrSrc[i-1];
pStrSrc[j++] = t;
//j++; //move to next start
return moveString(pStrSrc, pos+1);
}
int main()
{
char test[] = "test_moveString()=";
printf("str=%s\n",test);
moveString(test,5);
printf("movedstr=%s\n",test);
getchar();
return 0;
}
|
阅读(845) | 评论(0) | 转发(0) |