这是我的问题:
编写一个反转字符串的函数void reverse(char s [])。例如,“Harry”变成“yrraH”。
这是我的代码:
void reverse(char s[]);
int main()
{
char s [] = "Harry";
reverse(s);
cout << s << endl;
system("PAUSE");
return 0;
}
void reverse(char s[])
{
int length = strlen(s);
int c, i ,j;
for(int i=0, j=length-1 ; i<j ; i++, j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
它可以完美地扭转字符串。但是,我被要求用指针做。所以根据我的想法,首先我指定一个p指针来获取字符串中的第一个char。然后我分配一个q指针来获取字符串的最后一个字符串。 I循环通过反转阵列。但是当我试图这样做以获得最后一个字符时:
char *q = strlen(s-1);
我收到了一个错误。有人可以帮我用指针解决这个问题吗?
更新部分
if (strlen(s) > 0(
{
char* first = &s[0];
char*last = &s[strlen(s)-1];
while(first < last)
{
char temp = *first;
*first = *last;
*last = temp;
++first;
--last;
}
}
答案 0 :(得分:7)
请注意,Bartosz Marcinkowski的答案可能就是你的全部 教练正在寻找。但我写这个的方式是:
void reverse( char* str )
{
char* end = str + strlen( str );
while ( end > str ) {
-- end;
swap( *str, *end );
++ str;
}
}
这具有处理空的特殊情况的优点 字符串和单个字符串正确。也可以 认为它更惯用,因为它使用半开放 接口,在C ++中无处不在。它将为迭代器做好准备,迭代器总是定义半开的间隔(并且比指针更常用于此类事物)。
答案 1 :(得分:2)
尝试类似的东西。
char* left = &s[0];
char* right = &s[length-1];
for(; left<right ; left++, right--)
{
c = *left;
*left = *right;
*right = c;
}
答案 2 :(得分:0)
尝试使用此代码来反转字符串。
void reverse(char str[], int len)
{
char *fptr = str;
char *lptr = str + len -1;
char ch = 0;
while(fptr < lptr)
{
ch = *fptr;
*fptr = *lptr;
*lptr = ch;
*fptr++;
*lptr--;
}
}