c语言实现中文字符串排序
时间: 2023-11-09 10:55:27 浏览: 243
用c语言给字符串排序
要实现中文字符串排序,需要先对中文进行编码,常用的编码方式有GBK、UTF-8等。在排序时,可以采用快速排序、归并排序等算法。
以下是一个示例代码,使用GBK编码方式对中文字符串进行排序:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义中文字符编码方式为GBK
#define CODE_GBK 936
// 定义字符串数组
char *strArr[] = {"中华", "人民", "共和国", "万岁", "中国"};
// 获取中文字符串的长度(单位为字节)
int getStrLen(char *str)
{
int len = 0;
while (*str)
{
if (*str & 0x80) // 如果是中文字符
{
len += 2; // 长度加2
str += 2; // 指针向后移2位
}
else
{
len++; // 长度加1
str++; // 指针向后移1位
}
}
return len;
}
// 比较函数,用于快速排序
int cmp(const void *a, const void *b)
{
char *strA = *(char **)a;
char *strB = *(char **)b;
int lenA = getStrLen(strA);
int lenB = getStrLen(strB);
int len = lenA < lenB ? lenA : lenB;
int i = 0, res = 0;
while (i < len)
{
if (*strA == *strB)
{
strA++;
strB++;
i++;
}
else
{
res = strA[0] - strB[0];
break;
}
}
if (i == len) // 如果前面的字符都相同,则判断长度
{
res = lenA - lenB;
}
return res;
}
int main()
{
int len = sizeof(strArr) / sizeof(strArr[0]);
int i;
// 对字符串数组进行排序
qsort(strArr, len, sizeof(char *), cmp);
// 输出排序后的结果
for (i = 0; i < len; i++)
{
printf("%s\n", strArr[i]);
}
return 0;
}
```
在上面的示例代码中,我们定义了一个`getStrLen`函数,用于获取中文字符串的长度(单位为字节)。在比较函数`cmp`中,我们先获取两个字符串的长度,并取其中较短的一个长度作为比较的长度。然后逐个比较两个字符串相应位置的字符,如果相同则继续比较下一个字符,否则返回它们的差值。如果前面的字符都相同,则根据字符串长度的差值返回结果。
在`main`函数中,我们使用了`qsort`函数对字符串数组进行排序,排序时使用了`cmp`函数进行比较。最后将排序后的结果输出即可。
阅读全文