用c编程,分别输入两个字符串A和B,A由多个小字符串组成(中间由非字母隔开),B是由字母组成的字符串。求出A中包含B的小字符串的个数(详细看样例),并且输出它。(不区分大小写) 输入格式: 先输入字符串A,由回车结束。然后输入字符串B。 输出格式: 输出A中包含B字符串的个数
时间: 2024-10-20 16:14:14 浏览: 14
在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。(C语言)
在 C 编程中,你可以使用标准库函数如 `strtok` 和 `strstr` 来解决这个问题。首先,你需要将字符串 A 分割成单个小字符串数组,然后遍历这个数组,逐个检查每个小字符串是否包含字符串 B。以下是基本的步骤:
```c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
// 函数声明分割字符串并返回子串数组
char** split_string(char* str, char delimiter);
// 检查子串是否包含给定的字母串(忽略大小写)
int contains_substring(const char* sub, const char* target);
int main() {
char input_A[1000];
fgets(input_A, sizeof(input_A), stdin); // 从标准输入读取字符串 A
input_A[strlen(input_A) - 1] = '\0'; // 去除换行符
char input_B[100];
fgets(input_B, sizeof(input_B), stdin);
input_B[strlen(input_B) - 1] = '\0';
// 分割字符串 A
char** substrings = split_string(input_A, ' '); // 使用空格作为分隔符
int count = 0;
for (int i = 0; substrings[i] != NULL; i++) {
if (contains_substring(strcasestr(substrings[i], input_B), input_B)) { // 使用 strcasestr 匹配忽略大小写的子串
count++;
}
free(substrings[i]); // 释放内存
}
free(substrings); // 释放整个子串数组
printf("A中包含B字符串的个数: %d\n", count);
return 0;
}
// 辅助函数:分割字符串并返回子串数组
char** split_string(char* str, char delimiter) {
char** result = NULL;
size_t count = 0, len = strlen(str);
for (size_t i = 0; i < len; ++i) {
if (str[i] == delimiter) {
result[count++] = (char*)malloc((i + 1) * sizeof(char));
strncpy(result[count - 1], &str[0], i);
result[count - 1][i] = '\0';
str += i + 1;
}
}
if (str[len - 1]) {
result[count] = (char*)malloc(strlen(str) * sizeof(char));
strncpy(result[count], str, strlen(str));
result[count][strlen(str) - 1] = '\0';
}
result[count] = NULL;
return result;
}
// 检查子串是否包含给定的字母串(忽略大小写)
int contains_substring(const char* sub, const char* target) {
while (*target && *sub) {
if (tolower(*sub) != tolower(*target)) break;
sub++, target++;
}
return !*target;
}
```
运行此程序时,请记得按要求提供输入。在程序结束后,会输出字符串 A 中包含字符串 B 的小字符串个数。
阅读全文