求解字符串逆置怎修改


#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',这个没有必要,就算你不放,它自己也会有的