我试着写一个程序来反转字符串而不使用strrev()
函数。
我得到的问题是,当我运行程序时,我只得到'd'作为输出,而不是整个反向字符串'dlroW olleH'请帮我得到整个字符串。
#include<stdio.h>
#include<String.h>
char reverse(char s[])
{
int c, i, j;
for(i = 0,j = strlen(s) - 1; I < j; i++, j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
return *s;
}
void main()
{
char str[12] = "Hello World";
char result = reverse(str);
printf("%c", result);
}
程序中有几个问题:
-
没有这样的头文件
String.h
,但是string.h
。 -
因为您想要返回整个字符串,而不是单个字符。将
reverse()
函数的返回类型从char
改为char*
,并从其返回语句中删除解引用操作符,即return s;
。 -
在编辑后替换:
char result = reverse(str); printf("%c", result);
:
char *result = reverse(str); printf("%s", result);
整个程序应该是这样的:
#include <stdio.h>
#include <string.h> // Fixed the possible typo
// Prototype fixed
char* reverse(char s[]) {
int c, i, j;
for (i = 0, j = strlen(s) - 1; i < j; i++, j--) {
c = s[i];
s[i] = s[j];
s[j] = c;
}
return s; // Proper return statement
}
// main() must return an integer to the OS
int main(void) {
char str[12] = "Hello World";
char* result = reverse(str);
printf("%sn", result);
return 0;
}
这是一个演示。
你想要这个:
#include <stdio.h>
#include <string.h>
char *reverse(char s[]) // return a char* and not a char
{
int c, i, j;
for (i = 0, j = strlen(s) - 1; i < j; i++, j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
return s; // return a char* and not a char. return *s would return the 1st char only
}
void main()
{
char str[12] = "Hello World";
char* result = reverse(str); // result must be a char* and not a single char
printf("%s", result); // use %s for char*
}