我正在尝试编写一个简单的反转字符串的面试问题。
这是我的代码:
#include <string.h>
char* rev( char* str)
{
int i,j,l;
l = strlen(str);
for(i=0,j=l-1; i<l/2 ; i++, j--)
{
str[i] = (str[i] + str[j]);
str[j] = str[i] - str[j];
str[j] = str[i] - str[j];
}
return str;
}
int main()
{
char *str = " hello";
printf("\nthe reverse is %s ...", rev(str));
return 1;
}
基本上,这个给出了分段错误。
我有以下问题:
我得到分段错误可能是因为字符加起来没有在 ascii 中定义,因此我无法将它们作为字符存储回来,我正在使用 www.codepad.org [我想知道它是否只支持 ascii !!]。我的理解是正确的还是有别的原因。
对于同一平台,我该如何解决问题[我的意思是换成 codepad.org]
在这里,我必须使用一个额外的整数 l 来计算长度。因此,通过就地交换来节省单个字符空间..我正在使用一个额外的 int !.. 只是为了给面试官留下深刻印象:) ... 这种方法值得吗?
这个是为那些对编写单元测试/API 测试感兴趣的人准备的。我想有一个健壮的实现,所以什么是可能的测试用例。我假设如果面试官问这样一个简单的问题.. 他肯定想要一些非常健壮的实现和测试用例。我想的很少:
传递空字符串传递整数
字符串传递整数数组而不是 char 数组。
很长的弦,
single char string 特殊字符的字符串。
任何建议/建议都会有所帮助。