为什么我的反向函数没有将我的字符串反转回Hello!当我第二次调用我的功能时?
我可以更改使用我的函数多次反转+反转我的字符串?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void reverse(char arr[], int numberOfChars);
int main()
{
char myString[] = "Hello!";
int length = strlen(myString);
for (int i = 0; i < length; i++)
{
printf("%c", myString[i]);
}
printf("\n");
reverse(myString, length);
reverse(myString, length);
getchar();
return 0;
}
void reverse(char arr[], int numberOfChars)
{
for (int i = numberOfChars - 1; i >= 0; i--)
{
printf("%c", arr[i]);
}
getchar();
}
Run Code Online (Sandbox Code Playgroud)因为你永远不会修改arr[]内部reverse(),所以你只需按照迭代的顺序打印它.
它应该是这样的:
void reverse(char *s, size_t length)
{
for(size_t i = 0; i < length / 2; ++i)
{
const size_t tail = length - (i + 1);
const char tmp = s[tail];
s[tail] = s[i];
s[i] = tmp;
}
}
Run Code Online (Sandbox Code Playgroud)
也没有奇怪的getchar()电话 reverse(),没有任何意义.