我的任务是 实现函数反转。实现函数时,禁止使用C语言库的功能。 有人可以帮我实现功能strlen吗?
我的功能:
void revstr( char * str){
int i, len = 0;
len = strlen(str);
for (i = 0; i <= len / 2; i++){
*(str + len - i) = *(str + i);
*(str + i) = *(str + len - i - 1);
}
for (i = len / 2; i <= len; i++)
*(str + i) = *(str + i + 1);
}
答案 0 :(得分:3)
strlen返回字符串的长度。因此,您可以遍历整个字符串,递增计数器并将计数器作为长度
返回代码:
size_t my_strlen(char *str) {
size_t i;
for (i = 0; str[i] != '\0'; i++)
;
return i;
}
您的revstr代码看起来非常复杂。这是一种简单的方法。
char * revstr( char * str)
{
int i,end,len;
char temp;
len= my_strlen(str);
end = len-1;
for(i=0;i<len/2;i++)
{
temp=str[i];
str[i]=str[end];
str[end--]=temp;
}
return str;
}
注意:优良作法是编写str[i]
而不是*(str + i)
。
并且代码适合您的问题:)
答案 1 :(得分:1)
我不认为“禁止”使用标准库函数,使用strlen()
这里很好。他们不需要自己写。至于你的反向功能,我建议你解决这个问题。
一个简单的方法是有两个计数器,一个从字符串的开头开始,一个从字符串的结尾开始。您需要交换这些字符,可以这样做:
void swap(char *a, char *b) {
char temp = *a;
*a = *b;
*b = temp;
}
交换这些开始和结束字符后,递增起始计数器并递减结束计数器以向内移动字符串,然后再次交换。这可以用简单的循环编写:
for (start = 0, end = len-1; start <= end; start++, end--) {
swap(&string[start], &string[end]);
}
我会让你填写剩下的代码,但这给出了一般的想法。
答案 2 :(得分:1)
我这样做:
void revstr(char *str)
{
char *s = str;
char *e;
for (e=s; *e; ++e); //find the end
if (e==s)
return; //empty string
for (--e; e>s; --e,++s)
{
char t = *s;
*s = *e;
*e = t;
}
}