八义士 发表于 2024-9-22 16:42:13

字符串逆转出问题

#include<stdio.h>
#include<stdlib.h>
int main(void)
{


        char temp = '1';
        char b[] = "beautiful";
        char* p = b, * q = b;
        while (*q != NULL)
        q++;
        q = q - 1;

        while (p < q)
{
        temp = *p;
        *p-- = *q;
        *q++ = temp;
}
        puts(b);
        while(1);
        return 0;
}

FishC 发表于 2024-9-22 16:49:03

你好,鱼油!你的字符串逆转代码有一些问题,我来帮你逐步解决:

1. 包含头文件 `<stdio.h>`。
2. 声明字符数组而不是字符指针,以避免字符串文字的不可修改性。
3. 修改指针操作符的顺序。

这里是修改后的代码:

#include <stdio.h>

int main(void) {
    char temp;
    char b[] = "beautiful";// 使用数组而不是指针
   
    char* p = b;
    char* q = b;
   
    // 将 q 指向字符串的末尾
    while (*q != '\0')
      q++;
    q--;// 移动到最后一个字符

    // 交换字符
    while (p < q) {
      temp = *p;
      *p = *q;// 先赋值再移动指针
      *q = temp;
      p++;
      q--;
    }

    puts(b);
    return 0;
}

### 主要修改点:

1. **字符串数组声明**:使用字符数组 `char b[] = "beautiful";` 而不是字符指针 `char* b = "beautiful";`,因为字符串文字是常量,不应修改。
2. **指针操作顺序**:在交换字符时,先赋值再移动指针。即 `*p = *q; p++;` 和 `*q = temp; q--;`。

这样,你的程序就能正确逆转字符串并输出 `lufituaeb`。希望对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

八义士 发表于 2024-9-22 16:49:45

知道了,疏忽大意,自加自减写反了

FishC 发表于 2024-9-22 16:49:52

八义士 发表于 2024-09-22 16:49
知道了,疏忽大意,自加自减写反了

没关系,疏忽是难免的,明确问题就好。以下是最终修改好的代码:

#include <stdio.h>

int main(void) {
    char temp;
    char b[] = "beautiful";// 使用数组而不是指针
   
    char* p = b;
    char* q = b;
   
    // 将 q 指向字符串的末尾
    while (*q != '\0')
      q++;
    q--;// 移动到最后一个字符

    // 交换字符
    while (p < q) {
      temp = *p;
      *p = *q;// 先赋值再移动指针
      *q = temp;
      p++;
      q--;
    }

    puts(b);
    return 0;
}

### 主要修改点:
1. **字符串数组声明**:使用字符数组 `char b[] = "beautiful";`。
2. **指针操作顺序**:在交换字符时,先赋值再移动指针。

这样修改后,程序就可以正确逆转字符串并输出 `lufituaeb`。继续加油,有任何问题随时来问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

某一个“天” 发表于 2024-9-23 18:44:57

自加自减写反了,要理解着写,别背
页: [1]
查看完整版本: 字符串逆转出问题