给定一个串a和串b,求b在a中出现次数C语言
时间: 2024-12-29 17:35:03 浏览: 23
在C语言中,你可以使用标准库函数strstr()
来查找字符串b
是否在一个较大的字符串a
中出现,然后通过循环计算出现的次数。以下是一个简单的示例代码:
#include <stdio.h>
#include <string.h>
int count_occurrences(char *a, char *b) {
int count = 0;
while ((a = strstr(a, b)) != NULL) { // 使用strstr查找子串
count++; // 每找到一次就加一
a += strlen(b); // 跳过已匹配的部分继续查找下一个位置
}
return count;
}
int main() {
char str_a[] = "Hello, Hello, World!";
char str_b[] = "Hello";
int occurrences = count_occurrences(str_a, str_b);
printf("String '%s' appears %d times in string '%s'.\n", str_b, occurrences, str_a);
return 0;
}
在这个例子中,count_occurrences
函数接收两个字符串作为输入,它会返回b
在a
中出现的次数。注意,这个方法只适用于完全匹配的情况,并且对于大小写敏感。
相关问题
给定字符串 a 和 b ,求字符串 b 在 a 中出现次数。使用C语音
在C语言中,我们可以使用滑动窗口(Sliding Window)的思想来解决这个问题。滑动窗口是一种常用的查找模式出现次数的算法,通过维护两个指针,一个指向a的起始位置,另一个指向b的起始位置,然后逐字符比较,当遇到第一个不匹配的字符时,移动a的指针继续查找下一个子串。以下是C语言的一个简单实现:
#include <stdio.h>
#include <string.h>
int countSubstrInString(char* str1, char* str2) {
int len1 = strlen(str1);
int len2 = strlen(str2);
if(len2 > len1)
return 0; // 如果目标串比主串长,不可能完全匹配
int count = 0;
int left = 0;
for (int right = 0; right <= len1 - len2; right++) { // 使用右边界作为滑动窗口的结束
bool match = true;
for (int i = 0; i < len2; i++) {
if (str1[left + i] != str2[i]) {
match = false;
break;
}
}
if (match)
count++; // 找到一次匹配就增加计数
left++; // 移动左边界
}
return count;
}
int main() {
char str1[100], str2[100];
printf("Enter string a: ");
fgets(str1, sizeof(str1), stdin);
str1[strlen(str1)-1] = '\0'; // 去掉fgets留下的换行符
printf("Enter string b: ");
fgets(str2, sizeof(str2), stdin);
str2[strlen(str2)-1] = '\0';
int result = countSubstrInString(str1, str2);
printf("String b appears %d times in string a.\n", result);
return 0;
}
给定两个由小写字母组成的字符串A和B,判断B中的字符是否全部在A中出现。 C语言
可以使用一个数组来记录字符串A中每个字符出现的次数,然后遍历字符串B,检查每个字符在数组中的计数是否大于0。如果存在任何一个字符的计数为0,即表示B中的字符不全部在A中出现。以下是一个C语言的示例代码:
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
bool isAllCharsInA(char* A, char* B) {
int count[26] = {0}; // 数组大小根据字符串中可能的字符种类而定,这里假设只有小写字母
int lenA = strlen(A);
int lenB = strlen(B);
// 统计字符串A中每个字符的出现次数
for (int i = 0; i < lenA; i++) {
count[A[i] - 'a']++;
}
// 检查字符串B中的字符是否全部在A中出现
for (int i = 0; i < lenB; i++) {
if (count[B[i] - 'a'] == 0) {
return false;
}
}
return true;
}
int main() {
char A[] = "abcddef";
char B[] = "abc";
if (isAllCharsInA(A, B)) {
printf("B中的字符全部在A中出现\n");
} else {
printf("B中的字符不全部在A中出现\n");
}
return 0;
}
这个示例代码中,我们使用一个大小为26的数组 count
来记录字符串A中每个小写字母的出现次数。然后,遍历字符串B,检查每个字符在数组中的计数是否大于0。如果存在计数为0的字符,则返回 false
,表示B中的字符不全部在A中出现;否则,返回 true
,表示B中的字符全部在A中出现。
相关推荐
















