我试图反转这个C字符串,我认为我做的是正确的,但字符串在通过函数时保持不变。
#include <stdio.h>
char* reverse(char* string);
int main(int arc, char* argv[]) {
char word[] = "Hello World!";
printf("%s\n", word);
printf("%s\n", reverse(word));
return 0;
}
char* reverse(char* string) {
int i, j, n = 0;int len = 0;char temp;
//Gets string length
for (i = 0; *(string + i) != '0'; i++) {
len++;
}
//Reverses string
for (j = len - 1; j >= 0; j--) {
temp = string[n];
string[n] = string[j];
string[j] = temp;
n++;
}
return &string[0];
}
预期产出:你好,世界!
2条答案
按热度按时间stszievb1#
对于初学者来说,有一个错别字
你得写
也就是说,您必须使用
'\0'
或0
来代替字符'0'
。在这个for循环中
字符串被反转了两次。:)结果你得到了相同的字符串。
例如,函数可以按以下方式查找
也可以使用指针按以下方式定义函数
不使用指针的函数实现的相同方法可以如下所示
这里还有一个解决方案。我最喜欢它。虽然它效率很低,但并不像早期提出的解决方案那样微不足道。它是基于一个初学者尝试编写一个反转字符串的函数。:)
程序输出为
当然,代替在所有给出的解决方案中手动计算串的长度,可以使用在报头
<string.h>
中声明的标准串函数strlen
。lkaoscv72#
问题是输入
word
是一个数组,当传递给reverse函数时,它衰减为一个指针。在for循环中,我建议您不要使用
n
来跟踪位置,而是使用i
和j
来跟踪字符串的开始和结束,并分别递增和递减它们,使用strlen
来获得字符串的长度。此外,正如上面来自莫斯科的**@Vlad**所提到的,在
for
循环中,您正在检查0
,但它应该是\0
,这是空字符。请在下面找到生成预期结果的发布代码的更新: