#include <stdio.h>
void reverse(char *p1){
char *p2;
int i=0;
p2=p1;
while(p1[i]!='\0')
i++;
int k=i;
for(int n=0;n<k;n++)
{
p2[n]=p1[i];
i--;}
*p2='\0';
}
int main()
{
char s[100]="ssaaascs";
reverse(s);
printf("%s",s);
return 0;
}
按题主的代码和思路修改如下,供参考:
#include <stdio.h>
void reverse(char* p1) {
char* p2;
int i = 0;
p2 = p1;
while (p1[i] != '\0')
i++;
int k = i--;
for (int n = 0; n < i; i--, n++)
{
char t= p2[n];
p2[n] = p1[i];
p1[i] = t;
}
p2[k] = '\0';
}
int main()
{
char s[100] = "ssaaascs";
reverse(s);
printf("%s", s);
return 0;
}
用strlen得到长度,然后首尾交换
开头增加#include <string.h>
void reverse(char *p1)
{
int len = strlen(p1);
for(int i=0; i<len/2;i++)
{
char c = p1[i];
p1[i] = p1[len-i-1];
p1[len-i-1] = c;
}
}
for(int n=0;n<k;n++)
{
p2[n]=p1[i];
i--;}
*p2='\0';
改为:
for(int n=0;n<k;n++)
{
char tmp = p2[n];
p2[n]=p1[i -1];
p1[i -1] = tmp
i--;}
大概改好了
有帮助望采纳
#include <stdio.h>
#include <string.h>
void reverse(char *p1)
{
// char p2[100];
char temp;
// int i = 0;
// p2 = p1;
// while (p1[i] != '\0')
// i++;
int k = strlen(p1);
printf("%d\n", k);
int i = k - 1;
for (int n = 0; n < k; n++)
{
if (n > i)
break;
temp = p1[n];
p1[n] = p1[i];
p1[i] = temp;
i--;
}
}
int main()
{
char s[100] = "ssaaascs";
reverse(s);
printf("%s", s);
return 0;
}
for(int n=0;n<k;n++)
{
p2[n]=p1[i];
i--;}
*p2='\0';
无法输出是因为 *p2='\0'; p2跟p1是一样的,你赋值*p2='\0',那p1和p2都成空字符串了(p1,p2位置始终没有变化)
所以有输出,只不过输出为空字符串
你是想给最后一个位置放'\0',这个没有必要,就算你不放,它自己也会有的