c语言字符串中提取数字并排序的代码
时间: 2024-10-14 22:06:04 浏览: 88
在 C 语言中,处理字符串并提取其中的数字进行排序,可以分为几个步骤:
1. **定义函数**:首先,你可以定义一个函数用于从字符串中提取数字。这个函数通常会遍历字符串,检查每个字符是否为数字,并将其添加到结果数组中。
```c
#include <stdio.h>
#include <ctype.h>
int extract_numbers(char *str, int *numbers, int *count) {
for (int i = 0; str[i] != '\0'; i++) {
if (isdigit(str[i])) {
numbers[*count] = str[i] - '0';
(*count)++;
}
}
return *count;
}
```
2. **动态内存分配**:因为不确定有多少个数字,需要动态分配存储数字的数组。
```c
int num_count = 0;
int *number_array = malloc(sizeof(int) * 10); // 假设最多有10个数字
num_count = extract_numbers(input_string, number_array, &num_count);
```
3. **排序数字**:然后对提取出的数字进行排序,这里我们可以使用标准库中的 `qsort` 函数。
```c
#include <stdlib.h>
void sort_numbers(int numbers[], int count) {
qsort(numbers, count, sizeof(int), compare_ints);
}
// 比较函数,根据整数大小排序
int compare_ints(const void *a, const void *b) {
return (*(const int *)a) - (*(const int *)b);
}
```
4. **释放内存**:最后别忘了在不需要数字数组时释放它。
```c
free(number_array);
```
完整代码示例:
```c
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
int extract_numbers(char *str, int *numbers, int *count) {
for (int i = 0; str[i] != '\0'; i++) {
if (isdigit(str[i])) {
numbers[*count] = str[i] - '0';
(*count)++;
}
}
return *count;
}
void sort_numbers(int numbers[], int count) {
qsort(numbers, count, sizeof(int), compare_ints);
}
int compare_ints(const void *a, const void *b) {
return (*(const int *)a) - (*(const int *)b);
}
int main() {
char input_string[] = "abc123def456";
int num_count;
int *number_array = malloc(sizeof(int) * 10);
num_count = extract_numbers(input_string, number_array, &num_count);
sort_numbers(number_array, num_count);
printf("Sorted numbers: ");
for (int i = 0; i < num_count; i++) {
printf("%d ", number_array[i]);
}
free(number_array);
return 0;
}
```
阅读全文