You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:仅用getchar()和putchar()将两个空格替换为'x'的程序错误排查

解决连续两个空格替换为'x'的问题

嘿,我来帮你排查代码里的问题~你的需求是用getchar()和putchar()把连续两个空格替换成一个x,但当前代码会把每个空格都转成x,咱们先拆解下问题所在:

原代码的核心问题

  • 输出时机错误:你在读取到字符后直接putchar(ret),这会导致所有字符(包括空格)先被输出,后续的替换逻辑相当于在原字符后额外加x,完全不符合需求。
  • 状态记录缺失:变量second没有初始化,也没有逻辑去更新它的值,导致ret==' '&&second==' '的判断完全不可靠,甚至一开始会因为second是随机值出现错误判断。
  • 冗余变量无效:数组arr和循环变量i没有起到缓冲区的作用,逻辑混乱,完全是多余的。

正确的实现思路

我们只需要记录前一个字符的状态,通过对比当前字符和前一个字符来处理:

  1. 初始化一个变量记录前一个字符(比如prev_char),初始值设为非空格的任意字符(比如'\0')。
  2. 循环读取每个字符:
    • 如果当前字符不是空格:直接输出,同时更新prev_char为当前字符。
    • 如果当前字符是空格:
      • 若prev_char也是空格:说明遇到连续两个空格,输出'x',并把prev_char设为非空格(避免多个连续空格重复替换)。
      • 若prev_char不是空格:暂时不输出,把prev_char设为空格,等待下一个字符判断是否连续。

修正后的代码

#include <stdio.h>

int main() {
    int curr_char; // 用int存,因为EOF是int类型,避免匹配错误
    char prev_char = '\0'; // 初始化为非空格字符,避免初始误判

    while ((curr_char = getchar()) != EOF) {
        if (curr_char != ' ') {
            // 当前不是空格,直接输出并更新前一个字符状态
            putchar(curr_char);
            prev_char = curr_char;
        } else {
            // 当前是空格,判断前一个字符是否也是空格
            if (prev_char == ' ') {
                // 连续两个空格,输出x并重置前一个状态
                putchar('x');
                prev_char = '\0';
            } else {
                // 单个空格,先记录状态不输出,等待下一个字符判断
                prev_char = ' ';
            }
        }
    }

    // 处理输入末尾可能剩下的单个空格
    if (prev_char == ' ') {
        putchar(' ');
    }

    return 0;
}

测试示例

输入:hello world test end
输出:hello xworld x test end

内容的提问来源于stack exchange,提问作者user9585531

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:50:36