用c语言帮我写一个程序:字符串s=”abdkdkkdkkabcdddkbackabcdekkabc”,t=“abc”,找出t出现的位置和次数。
时间: 2024-09-24 21:10:05 浏览: 39
当然可以。下面是一个简单的C语言程序,它会找到字符串`t`在字符串`s`中出现的所有位置以及次数:
```c
#include <stdio.h>
#include <string.h>
void find_string_positions(char *str, char *target, int *positions, int *count) {
int i = 0;
while (true) {
i = strstr(str, target);
if (i == NULL) break; // 如果没找到目标,终止循环
// 找到目标位置并添加到数组中
positions[i - str] = i - str;
// 更新计数
(*count)++;
str = i + 1; // 移动搜索起点到下一个字符
}
}
int main() {
char s[] = "abdkdkkdkkabcdddkbackabcdekkabc";
char t[] = "abc";
int positions[100], count = 0;
int len_s = strlen(s), len_t = strlen(t);
positions[0] = -1; // 首次查找前预留位置,表示未开始
find_string_positions(s, t, &positions[1], &count);
printf("String '%s' appears at the following positions:\n", t);
for (int j = 0; j <= count; j++) {
printf("%d: ", positions[j]);
}
printf("\nFrequency of '%s': %d\n", t, count);
return 0;
}
```
这个程序首先定义了两个函数,`find_string_positions`用于查找目标字符串在原字符串中的位置,并更新计数器。然后在主函数中初始化数据结构并调用该函数。最后打印出位置列表和目标字符串的出现次数。
注意:此代码假设最多有100个匹配位置。如果实际匹配位置可能超过这个范围,你需要增加数组大小或采用动态内存分配。
阅读全文