题目描述
编一个程序,输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。
输入格式
一个字符串,长度不超过80个字符
输出格式
删掉非英文字母后的字符串。
样例输入
abc123ABC+xyz.5
样例输出
abcABCxyz
代码解析
1. 引入头文件
代码首先引入了stdio.h
和string.h
头文件。stdio.h
用于标准输入输出,string.h
提供了字符串操作相关的函数,如strlen
。
2. 主函数定义
main
函数是程序的入口点,它没有接收任何参数,也没有返回值。
3. 定义字符数组和变量
在main
函数内部:
- 定义了一个字符数组
ch[1000]
,大小为1000,初始化为0。这个数组用来存储输入的字符串。 - 定义了一个整型变量
xb
,初始化为0。这个变量用来记录新字符串中最后一个有效字符的索引。
4. 读取输入
使用scanf("%s", ch);
从标准输入读取一个字符串,存储在ch
数组中。
5. 过滤字母字符
通过一个for
循环遍历ch
数组中的每个字符:
- 使用
strlen(ch)
获取ch
数组中字符串的长度。 - 循环条件是
i < strlen(ch)
,即遍历整个字符串。 - 在循环体内,使用条件判断
ch[i] >= 'a' && ch[i] <= 'z' || ch[i] >= 'A' && ch[i] <= 'Z'
来检查当前字符是否是字母。 - 如果是字母,则将其复制到
ch[xb]
,并将xb
的值增加1。
6. 设置字符串结束符
在循环结束后,将ch[xb]
设置为NULL
(即'\0'
),这是C语言字符串的标准结束符。这一步是必要的,因为它确保了printf
在输出字符串时知道在哪里停止。
7. 输出结果
使用printf("%s", ch);
输出处理后的字符串。此时输出的字符串只包含原始字符串中的字母字符。
8. 程序结束
main
函数返回0,表示程序正常结束。
代码分析
- 代码实现了去除字符串中非字母字符的功能,并且只保留了字母字符。
- 使用
strlen
函数来获取字符串长度,这在每次循环中都进行计算,可能会导致不必要的性能开销,尤其是在字符串很长时。 - 代码中没有错误检查,例如输入是否为预期的字符串类型,或者
scanf
是否成功读取了输入。 - 代码通过
xb
变量有效地构建了一个新的字符串,该字符串只包含原始字符串中的字母字符。 - 最后,通过设置
ch[xb] = NULL;
确保了字符串正确地以NULL
字符结尾,这是C语言字符串操作中的一个重要步骤。
源代码
#include <stdio.h>
#include <string.h>
int main(void)
{
char ch[1000] = { 0 };
int xb = 0;
scanf("%s", ch);
for (int i = 0; i < strlen(ch); i++)
{
if (ch[i] >= 'a' && ch[i] <= 'z'|| ch[i] >= 'A' && ch[i] <= 'Z')
{
ch[xb] = ch[i];
xb++;
}
}
ch[xb] = NULL;
printf("%s",ch);
return 0;
}