都是很简单的题目,记录下来以做反复复习。
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,重叠了)怎么办?