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
相关产品推荐
相关产品推荐

