这一个函数,从一个长字符串中统计给定的字符串出现的位置,按照位置大小排序
时间: 2023-03-28 19:00:23 浏览: 93
可以使用 strstr 函数来查找给定字符串在长字符串中的位置,然后将位置存储在数组中,并使用快速排序算法对数组进行排序。代码示例:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
void quick_sort(int arr[], int left, int right);
int partition(int arr[], int left, int right);
void swap(int *a, int *b);
int main()
{
char long_str[MAX_LEN], sub_str[MAX_LEN];
int pos[MAX_LEN], len, sub_len, i, j, k;
printf("请输入长字符串:");
fgets(long_str, MAX_LEN, stdin);
len = strlen(long_str);
if (long_str[len - 1] == '\n') {
long_str[len - 1] = '\';
len--;
}
printf("请输入要查找的字符串:");
fgets(sub_str, MAX_LEN, stdin);
sub_len = strlen(sub_str);
if (sub_str[sub_len - 1] == '\n') {
sub_str[sub_len - 1] = '\';
sub_len--;
}
j = ;
for (i = ; i < len; i++) {
if (strstr(&long_str[i], sub_str) == &long_str[i]) {
pos[j++] = i;
}
}
quick_sort(pos, , j - 1);
printf("给定字符串在长字符串中出现的位置为:");
for (k = ; k < j; k++) {
printf("%d ", pos[k]);
}
printf("\n");
return ;
}
void quick_sort(int arr[], int left, int right)
{
if (left < right) {
int pivot = partition(arr, left, right);
quick_sort(arr, left, pivot - 1);
quick_sort(arr, pivot + 1, right);
}
}
int partition(int arr[], int left, int right)
{
int pivot = arr[right];
int i = left - 1;
int j;
for (j = left; j < right; j++) {
if (arr[j] < pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[right]);
return i + 1;
}
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
```
阅读全文