在线编译器 C

#include <stdio.h> void my_strcat(char dst[], char src[]){ int m=0,n=0; while(src[m]!='\n'&&src[m]!='\0'){ if(src[m]>='a'&&src[m]<='z'){ dst[n]=src[m]; n++; } if(src[m]>='A'&&src[m]<='Z'){ dst[n]=src[m]; n++; } m++; } dst[n]='\0'; int t=0; while(dst[t]!='\0'){ printf("%c",dst[t]); t++; } } int main() { char n[1000]={"Abjsdf.OPfjs."},answer[1000]; my_strcat(answer,n); return 0; }
这段代码定义了一个 `my_strcat` 函数,它的作用是从源字符串 `src` 中提取所有英文字母(大小写),复制到目标数组 `dst` 中,然后打印结果。在 `main` 函数中,它用字符串 `"Abjsdf.OPfjs."` 作为源,调用该函数。

代码中有一个逻辑问题:函数名是 `my_strcat`,但实际行为并不是字符串拼接(concatenation),而是过滤复制。另外,在 `main` 中调用时,参数顺序是 `my_strcat(answer, n)`,但函数内部先遍历 `src` 再写入 `dst`,这符合你的用法,不过函数名容易引起误解。

- 检查 `while(src[m]!='\n'&&src[m]!='\0')` 中的 `'\n'` 条件:你的源字符串中没有换行符,这个条件不会触发,但通常字符串结束只检查 `'\0'` 即可,加上 `'\n'` 可能不是你的本意。
- 注意函数内部直接打印了结果,但 `main` 中并没有使用 `answer` 数组做其他操作。如果你希望函数只负责填充数组,打印应该放在 `main` 中,这样职责更清晰。