arrays - 使用提供的字符集进行字典排序
问题描述
我了解执行字典排序背后的逻辑以及如何以简单的方式对其进行编码。当看到这个函数签名时,我不知道该怎么做
void sort_lexicographically(char *phrase, char const *alphabet);
其中两个参数都是字符串。
解决方案
给定函数签名,对于函数应该做什么只有一种合理的解释:phrase
根据定义的排序规则对字符串中的字符进行就地排序alphabet
。这可以通过例如包含每个字符的排序位置的表来完成。
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
char ord[CHAR_MAX-CHAR_MIN+1];
int compar(const void *a, const void *b)
{
return ord[*(char *)a-CHAR_MIN]-ord[*(char *)b-CHAR_MIN];
}
void sort_lexicographically(char *phrase, char const *alphabet)
{
memset(ord, 0, sizeof ord); // all characters not in alphabet get order 0
int o = 0; // collating order, increasingly assigned to alphabet characters
while (*alphabet) ord[*alphabet++-CHAR_MIN] = ++o;
qsort(phrase, strlen(phrase), 1, compar);
}
int main()
{
char phrase[] = "the quick brown fox jumps over the lazy dog";
puts(phrase);
sort_lexicographically(phrase, "aeioubcdfghjklmnpqrstvwxyz");
puts(phrase);
}
推荐阅读
- python - Python请求多个表单文件发布
- java - 403 Forbidden Error - Java , java.net.HttpURLConnection 不能在 aws-ec2 机器上工作,但在本地工作站上工作正常
- go - 提取结构的 FIELD 名称并将它们放入字符串切片中
- c# - 如何在某些在 SYSTEM 帐户下运行并引发异常“访问被拒绝”的进程上使用 Process.PriorityClass?
- django - 使用 ajax 发送 POST 请求时出现 403 错误(csrf 令牌集)
- c++ - 如何将字符符号“+”直接转换为操作+(加法)?C++
- javascript - 使用以前的信息重定向到另一个页面 - JS
- javascript - 根据一天中的时间添加或更改元素类别
- slack-api - Slack Connect users.info 缺少电子邮件
- javascript - 如何等待功能完成?