为什么我的反向功能没有将我的字符串反转回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();
}
答案 0 :(得分:5)
因为您永远不会修改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;
}
}
getchar()
中没有任何奇怪的reverse()
来电,这没有任何意义。
答案 1 :(得分:1)
如果要反转单词“Hello!”,将其定义为字符串然后使用reverse(myString.begin(), myString.end())
或reverse(&myString[0], myString.length())
函数reverse(p1, p2)
的参数应为reverse(first_position, last_position)
此外,如果你真的想把字符串定义为char,你应该将它们放在迭代中,然后像@unwind那样逐一反转它们。
有关reverse
功能的更多详情,请访问http://www.cplusplus.com/reference/algorithm/reverse/
答案 2 :(得分:0)
您第二次使用相同的字符串。你的函数是无效的,你几乎没有对字符串本身做任何事情,只是以相反的顺序打印字母。对于你想要的,你应该在变量中保存你正在做的事情然后返回它,并且可以使用一个函数来单独打印。
答案 3 :(得分:0)
当你从main函数调用时,反向函数的参数(myString)是两次相同的。您只是以反向格式打印char而不是在子模块中反向打印。