在c语言中将字符串用asc值排序
时间: 2023-12-28 11:04:02 浏览: 86
Oracle数据库中对null值的排序及mull与空字符串的区别
可以使用字符串排序函数 `qsort`,结合自定义的比较函数,来实现按照 ASCII 值排序字符串的功能。
比较函数的原型为:
```c
int cmp(const void *a, const void *b);
```
其中,`a` 和 `b` 分别指向待比较的两个字符串,函数返回值根据比较结果决定:
- 若 `a` 应排在 `b` 前面,返回负数;
- 若 `a` 应排在 `b` 后面,返回正数;
- 若 `a` 和 `b` 相等,返回 0。
下面是一个例子,演示了如何使用 `qsort` 函数来排序字符串:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp(const void *a, const void *b) {
const char *sa = *(const char **)a;
const char *sb = *(const char **)b;
return strcmp(sa, sb);
}
int main() {
const int n = 5;
char *s[n] = {"hello", "world", "apple", "banana", "cat"};
qsort(s, n, sizeof(char *), cmp);
for (int i = 0; i < n; ++i) {
printf("%s\n", s[i]);
}
return 0;
}
```
输出结果为:
```
apple
banana
cat
hello
world
```
如果需要按照字符串中每个字符的 ASCII 值排序,则可以修改比较函数实现。下面是一个例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp(const void *a, const void *b) {
const char *sa = *(const char **)a;
const char *sb = *(const char **)b;
const int la = strlen(sa);
const int lb = strlen(sb);
const int len = la < lb ? la : lb;
for (int i = 0; i < len; ++i) {
if (sa[i] != sb[i]) {
return sa[i] - sb[i];
}
}
return la - lb;
}
int main() {
const int n = 5;
char *s[n] = {"hello", "world", "apple", "banana", "cat"};
qsort(s, n, sizeof(char *), cmp);
for (int i = 0; i < n; ++i) {
printf("%s\n", s[i]);
}
return 0;
}
```
输出结果为:
```
apple
banana
cat
hello
world
```
阅读全文