题目:用C语言写一个程序,输入一个字符串,过滤此串,只保留字符串中的字母字符,并统计新生成的字符串中包含的字母个数,要求用指针实现。
实现:
#include <stdio.h>
#include <ctype.h>
int filterLetters(char *str);
int main() {
char str[100];
printf("请输入一个字符串: ");
fgets(str, 100, stdin); // 获取用户输入的字符串
int letters_count = filterLetters(str); // 调用函数过滤字母字符并统计个数
printf("过滤后的结果为: %s\n", str);
printf("过滤后的字符串中包含 %d 个字母\n", letters_count);
return 0;
}
int filterLetters(char *str) {
char *p1 = str, *p2 = str;
int count = 0;
while (*p2 != '\0') {
if (isalpha(*p2)) { // 判断字符是否为字母
*p1++ = *p2; // 指针 p1 和 p2 分别指向相同的字母字符
count++; // 统计字母个数
}
p2++; // p2 每次移动指向下一个字符
}
*p1 = '\0'; // 将 p1 所在的位置赋值为 NULL,结束字符串
return count;
}
解释1:
这段代码实现了一个过滤字符串中非字母字符的功能,并统计字母个数。
- 首先,在主函数中,定义一个长度为100的字符数组str,用fgets函数从标准输入获取用户输入的字符串。
- 然后调用filterLetters函数,利用指针p1和p2遍历字符串中的每个字符,判断是否为字母字符,
- 若是,则将其赋值给p1所指向的位置,并让p1指向下一个位置,同时统计字母个数count;
- 若不是,则直接跳过该字符,继续向后遍历。最后,在filterLetters函数中,将p1所在的位置赋值为NULL,结束字符串,并返回字母个数count。
- 需要注意的是,isalpha函数是ctype.h头文件中的一个函数,用来判断字符是否为字母,如果是则返回非零值(true),否则返回0(false)。此外,在使用fgets函数时,需要注意输入字符串的长度不要超过数组str的长度,否则会导致数组越界的问题。
解释2:
这段代码的功能是从用户输入的字符串中过滤出字母字符,并统计字母字符的个数,最后输出过滤后的结果和字母字符的个数。文章来源:https://www.toymoban.com/news/detail-477585.html
- 具体来说,代码中首先包含了两个头文件:stdio.h 和 ctype.h。stdio.h 包含了一些标准输入输出函数,而 ctype.h
包含了一些字符处理函数,例如判断一个字符是否为字母字符。 - 在 main 函数中,首先定义了一个 char 类型的数组 str,用于存储用户输入的字符串。然后通过 fgets 函数从标准输入流
stdin 中获取用户输入的字符串,最多读取 100 个字符,将其存储在 str 数组中。 - 接着调用 filterLetters函数对字符串进行过滤,该函数的作用是将字符串中的字母字符保留下来,并且将它们移动到数组的前面,非字母字符则被忽略掉。该函数返回被保留下来的字母字符的个数。
- 在 filterLetters 函数中,首先定义两个指针 p1 和 p2,分别指向字符串的开头。然后使用一个 while循环遍历整个字符串,如果当前字符是字母字符,则将其移动到 p1 所指向的位置,并将 p1 后移一位,同时统计字母字符的个数count。如果当前字符不是字母字符,则直接将 p2 后移一位。
- 最后,在字符串的末尾加上一个 NULL 字符,以表示字符串的结束。在 main 函数中,输出过滤后的结果和字母字符的个数即可。
总之,这段代码实现了一个简单的字符串处理功能,能够对用户输入的字符串进行一定的过滤和统计。文章来源地址https://www.toymoban.com/news/detail-477585.html
到了这里,关于【蓝桥杯算法题】字符串匹配算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!