任何人都可以帮我重写下面我只用点和指针增量/减量写的函数吗?我对指针没什么经验,所以我不知道该怎么做。
void reverse(char * s)
{
int i, l = strlen(s);
char c;
for(i = 0; i < (l >> 1); i++)
{
c = s[i];
s[i] = s[l - i - 1];
s[l - i - 1] = c;
}
}
不要使用指针运算或数组表示法。 关于如何重写上述功能的任何帮助或提示都是适用的。 这不是一个作业问题,这是Big C ++书中的高级指针程序之一。 谢谢!
答案 0 :(得分:4)
void reverse(char* s)
{
char* end(s);
while (*end) ++end;
std::reverse(s, end);
}
答案 1 :(得分:1)
仅使用指针递增和递减将是这样的,它可以变得更紧凑,但它变得不那么可读,因为有些人可能会遇到麻烦并且理解它。 while
可以像你一样for
,但这更像是指针
在GCC 4.5.1中测试:
void rev(char* s)
{
char c;
char* e = s;
while(*e) e++;
e--;
while(s < e)
{
c = *s;
*s = *e;
*e = c;
e--;
s++;
}
}
但是,如果您使用C ++,则应该使用std::string
...