简单的面试算法题:非循环求字符串长度和字符串拷贝源函数

都是很简单的题目,记录下来以做反复复习。

1.如何不调用库函数且不用循环的方式求一个char*类型字符串的长度。比如:char a[] = "abcdefg";求a的长度。

方法:递归的方式。

Talk is cheap,show me the word.

#include<iostream>
#include<string.h>
#include<cstdlib>

using namespace std;

int sl(char *arr)
{
	int i=0 ;
	while(arr[i]!='\0')
	{
		i++;
	}
	return i;
}

int sl2(char * arr)
{
	if( *arr == '\0' ) return 0;
	else return sl2(arr+1) + 1;
}

int main()
{
	char a[] = "abcdefg";

	cout<<strlen(a)<<endl;//调用库函数

	cout<<sl(a)<<endl;//循环方式

	cout<<sl2(a)<<endl;//递归方式

	return 0;
}
当然这里只是做一个最简单的实例,实际上strlen的源代码考虑的情况很多,还是很复杂的。


2.填充while语句条件,使得实现字符串从src复制的到dst的功能。(不考虑非法字符串)

void my_string_copy(char *dst, char*src)
{
   while(___________);
}

答案:*dst++ = *src++;


当然这个问题还有几个陷阱:

1.首先要判断一下a和b是否为空?

2.a和b是不是指向同一个区域?

3.如果b指针指向的是a字符串当中的某个字节(也就是a和b的区域overlap,重叠了)怎么办?



你可能感兴趣的:(算法,面试,递归,strlen)