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

C/C++不使用strcpy及string.h实现字符数组拷贝并过滤空格问题

问题核心原因

原有代码的核心错误是x和y两个数组共用了同一个索引i:遍历x遇到空格/非字母字符时,你跳过了赋值操作,但索引i仍然会自增,导致y数组对应位置没有被赋值,留下未初始化的垃圾值。如果你提前把y全部初始化为0,这些跳过的位置默认就是\0,会直接截断字符串,所以只能输出第一个单词。

修正方案

给y数组单独设置一个索引变量,仅当匹配到合法字母时才对y赋值、并递增y的索引,就能避免中间出现空值/垃圾值,且全程不需要引入string.h头文件、不需要调用strcpy相关函数:

#include <iostream>
#include <stdio.h>
using namespace std;

int main() {
   int i, j = 0; // j为y数组的专属索引
   char x[50], y[50];
   cout << "Enter : ";
   scanf_s("%[^\n]", x, sizeof(x));
   for (i = 0; x[i] != '\0'; i++) {
       // 仅保留字母字符
       if ((x[i] >= 'a' && x[i] <= 'z') || (x[i] >= 'A' && x[i] <= 'Z')) {
           y[j++] = x[i];
       }
   }
   y[j] = '\0'; // 给y数组补字符串结束符
   cout << y;
   return 0;
}

效果验证

输入car a car时,代码会自动跳过所有空格,依次把c、a、r、a、c、a、r写入y数组,最终输出结果就是无空格、无垃圾字符的caracar,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:51:03