编写函数reverse,实现将一个字符串逆置。注意:请填写下面函数的{ }部分。
#include<string.h>
void reverse(char *x)
{
}
main()
{
char p[]="hello";
reverse(p);
puts(p);
}
#include <stdio.h>
#include <string.h>
void reverse(char *x)
{
char c;
int a=0,b=strlen(x)-1;
for(;a<b;a++,b--)
{
c=x[a];
x[a]=x[b];
x[b]=c;
}
}
int main()
{
char s1[]="",s2[]="a";
char s3[]="sd",s4[]="dfg";
reverse(s1);
reverse(s2);
reverse(s3);
reverse(s4);
printf("%s\n%s\n",s1,s2);
printf("%s\n%s\n",s3,s4);
return 0;
}
代码
输出
追问我这道题是填空题,填写函数部分。
追答整个代码都给你了,复制你需要的部分不就行了吗?复制5-12行就行了。
此外,你的main函数是有问题的,p指向了一个位于只读存储区的字符串,是不能通过p修改这个字符串的。
应将p定义成数组而不是指针。
追问题目出错了,题目改一下
#include
void reverse(char *x)
{
}
main()
{
char p[]="hello";
reverse(p);
puts(p);
}
改后就对了。改后还可以用我提供的代码。
这个算法 你试试
追问有错,算不出来。
追答我觉得是题出的有问题,我反复试了下。
下面的代码可以。
#include "malloc.h"
#include "string.h"
void reverse(char **x)
{
char *tmp;
char *tTmp;
char *s;
s = *x;
int len = strlen(*x);
tTmp = tmp = (char *)malloc((len + 1) * sizeof(char));
while (*s != 0)
{
s++;
}
s--;
while (s >= *x)
{
*tTmp = *s;
s--;
tTmp++;
}
*tTmp = 0;
*x = tmp;
}
int _tmain(int argc, _TCHAR* argv[])
{
char *x = "Hello";
reverse(&x);
printf("%s", x);
return 0;
}
题目出错了,题目改一下
#include
void reverse(char *x)
{
}
main()
{
char p[]="hello";
reverse(p);
puts(p);
}
这样就简单了。
void reverse(char *x)
{
char tmp;
char *s;
s = x;
while (s != 0)
{
s++;
}
s--;
while (s >= x)
{
tTmp = *s;
*s = *x;
*x = tTmp;
s++;
x--;
}
}