函数reverse的原型为:void reverse(char s[]);,其功能是将字符串s中的字符位置颠倒。例如,字符串“ilovechina”中的字符位置颠倒后变为“anihcevoli”。编制
时间: 2023-06-05 21:48:09 浏览: 215
以下是一个C语言的函数,实现了reverse函数的功能:
```
void reverse(char s[]) {
int len = strlen(s);
int i;
char temp;
for (i = 0; i < len/2; i++) {
temp = s[i];
s[i] = s[len-1-i];
s[len-1-i] = temp;
}
}
```
该函数首先通过strlen函数获取字符串s的长度,然后通过循环将字符串s中的字符位置颠倒。具体来说,它使用一个循环变量i来遍历字符串s的前半部分,将第i个字符与倒数第i个字符互换位置,直到遍历完整个字符串s的前半部分。由于字符串s的长度可能是奇数,所以在循环的条件中使用了len/2来保证只遍历了一半的字符。
例如,如果将字符串“ilovechina”传递给reverse函数,函数将修改该字符串的内容,使其变为“anihcevoli”。
相关问题
下面给出的程序的功能是将输入的字符串反向,例如输入字符串“abcdefg”,输出"gfedcba"。 主函数中读入一个字符串,然后调用reverse函数将字符串反向,最后输出反向后的字符串。 函数原型:reverse(char *str, int i, int j ),其中s为字符串的首地址,i、j是以字符串中心对称的两个字符的下标,i在前、j在后。reverse函数采用了递归算法。 程序中存在着错误,请改错后提交。 #include <stdio.h> void reverse( char *str, int i, int j ) { char temp; if( i < j ) { temp = str[i]; str[i] = str[j]; str[j] = temp; reverse( str, i+1, j-1 ); } return; } int main() { int n=0; char s[100]; gets(s); while( s[n] != '\0' ) n++; reverse( s, 0, n ); puts(s); return 0; }
程序中的错误在于reverse函数中调用递归时传递的终止条件不正确,应该使用i<=j作为终止条件,而不是i<j。此外,main函数中传递给reverse函数的第二个参数应该是n-1,而不是n。修改后的程序如下:
```
#include <stdio.h>
void reverse(char *str, int i, int j) {
char temp;
if (i <= j) {
temp = str[i];
str[i] = str[j];
str[j] = temp;
reverse(str, i+1, j-1);
}
return;
}
int main() {
int n=0;
char s[100];
gets(s);
while (s[n] != '\0')
n++;
reverse(s, 0, n-1);
puts(s);
return 0;
}
```
编写函数void reverse(char* s);将形参s所指向的字符串反转(如s指向字符串为”hello world”,反转后为”dlrow olleh”)。编写main函数,在main中调用reverse函数,并输出反转后的字符串。
这里是一个可能的实现:
```c
#include <stdio.h>
#include <string.h>
void reverse(char* s) {
int len = strlen(s);
for (int i = 0; i < len / 2; i++) {
char tmp = s[i];
s[i] = s[len - 1 - i];
s[len - 1 - i] = tmp;
}
}
int main() {
char s[] = "hello world";
printf("Original string: %s\n", s);
reverse(s);
printf("Reversed string: %s\n", s);
return 0;
}
```
这个程序中,`reverse`函数接受一个指向字符串的指针,并且在原地反转字符串。具体来说,它通过交换第i个字符和第len-1-i个字符的位置,实现了字符串的反转。在`main`函数中,我们定义一个测试字符串`s`,并且先输出原始字符串,再调用`reverse`函数,最后输出反转后的字符串。
阅读全文