【算法】C语言使用qsort对字符串字符进行排序(解决字符串长度不统一的问题)

news2025/1/23 9:30:26

核心思想是

  • 当a的长度>b时,a一定比b大
  • 当a,b长度相等时,通过strcmp比较哪个字典序大,也就是实际的数哪个大
  • 当a的长度<b是,b一定比a大
    这时候就不得不感慨C++的string是多么好用的,哎
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int compare1(const void *a,const void *b){
	printf("(char*)a:%s\n",(char*) a);			//代表的是实际的数据,如例子中的"123","456","123032"
	if(strlen((char*)a)>strlen((char*)b))	return 1;
	else if(strlen((char*)a)==strlen((char*)b))	return strcmp((char*)a,(char*)b);
	else	return -1;
	//return strlen((char*)a)>strlen((char*)b)?1:;
}
int main(){
	
	char b[][50]={"123","456","123032","1","434"};
	int num = sizeof(b)/sizeof(b[0]);
	for(int i=0;i<num;i++){
		printf("%s ",b[i]);
	} 
	printf("\n");
	qsort(b,num,sizeof(b[0]),compare1);
	for(int i=0;i<num;i++){
		printf("%s ",b[i]);
	} 
	printf("\n");
}

运行结果
在这里插入图片描述

而对于leetcode 1985:找出数组中的第 K 大整数,上述写法就不行了,需要使用*(char**)来实现了

int compare(const void*a,const void*b){
    //printf("*(char**)a:%s\n*(char**)b:%s\n",*(char**) a,*(char**)b);
    if(strlen(*(char**)a)!=strlen(*(char**)b))   return strlen(*(char**)b)-strlen(*(char**)a);
    else  return -strcmp(*(char**)a,*(char**)b);
}

char* kthLargestNumber(char** nums, int numsSize, int k) {
    for(int i=0;i<numsSize;i++) printf("%s ",nums[i]);
    printf("\n");
    qsort(nums, numsSize, sizeof(char *), compare);
    for(int i=0;i<numsSize;i++) printf("%s ",nums[i]);
    return nums[k-1];
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1454610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

由于找不到MSVCP140.dll无法运行软件游戏,多种解决方法分享

电脑系统在运行过程中&#xff0c;当出现“由于找不到MSVCP140.dll”这一提示时&#xff0c;可能会引发一系列潜在的问题与影响。当电脑无法找到这个特定的dll文件时&#xff0c;意味着相关应用可能无法顺利加载并执行必要的组件&#xff0c;进而导致程序无法启动或运行过程中频…

基于SpringBoot+WebSocket+Spring Task的前后端分离外卖项目-订单管理(十七)

订单管理 1. Spring Task1.1 介绍1.2 cron表达式1.3 入门案例1.3.1 Spring Task使用步骤1.3.2 代码开发1.3.3 功能测试 2.订单状态定时处理2.1 需求分析2.2 代码开发2.3 功能测试 3. WebSocket3.1 介绍3.2 入门案例3.2.1 案例分析3.2.2 代码开发3.2.3 功能测试 4. 来单提醒4.1 …

基于微信小程序的校园跑腿系统的研究与实现,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

无锁、偏向锁、轻量级锁、重量级锁

无锁、偏向锁、轻量级锁、重量级锁 1、偏向锁、轻量级锁、重量级锁适用于不同的并发场景 偏向锁&#xff1a;无实际的锁竞争&#xff0c;且将来只有第一个申请锁的线程会使用锁。偏向锁只有初始化时需要一次CAS 轻量级锁&#xff1a;无实际的锁竞争&#xff0c;多个线程交替使…

论文阅读-EMS: History-Driven Mutation for Coverage-based Fuzzing(2022)模糊测试

一、背景 本文研究了基于覆盖率的模糊测试中的历史驱动变异技术。之前的研究主要采用自适应变异策略或集成约束求解技术来探索触发独特路径和崩溃的测试用例&#xff0c;但它们缺乏对模糊测试历史的细粒度重用&#xff0c;即它们在不同的模糊测试试验之间很大程度上未能正确利用…

SG7050EAN规格书

SG7050EAN 晶振是EPSON/爱普生的一款额定频率73.5 MHz ~ 700mhz的石英晶体振荡器&#xff0c;7050封装常规有源晶振&#xff0c;4脚贴片&#xff0c;具有小尺寸&#xff0c;高稳定性。SG5032EAN 晶体振荡器结合了相位锁定环&#xff08;PLL&#xff09;技术和AT切割晶体单元&am…

Unity中,C#的事件与委托区别和经典实例

文章目录 实例1&#xff1a;委托&#xff08;Delegate&#xff09;的基本用法实例2&#xff1a;事件&#xff08;Event&#xff09;的声明与订阅实例3&#xff1a;Unity引擎中的委托实例 - UI Button.onClick实例4&#xff1a;事件&#xff08;Event&#xff09;的安全性实例5&…

ViT: transformer在图像领域的应用

文章目录 1. 概要2. 方法3. 实验3.1 Compare with SOTA3.2 PRE-TRAINING DATA REQUIREMENTS3.3 SCALING STUDY3.4 自监督学习 4. 总结参考 论文&#xff1a; An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 代码&#xff1a;https://github.com…

2024几个测试接口的好工具,效率加倍~

作为一名后端程序员&#xff0c;一定要对自己写的接口负责&#xff0c;保证接口的正确和稳定性。因此&#xff0c;接口测试也是后端开发中的关键环节。 但我相信&#xff0c;很多朋友是懒得测试接口的&#xff0c;觉得这很麻烦。一般自己写的接口自己都不调用&#xff0c;而是…

Acwing---877. 扩展欧几里得算法

扩展欧几里得算法 1.题目2.基本思想3.代码实现 1.题目 给定 n n n 对正整数 a i ai ai, b i bi bi&#xff0c;对于每对数&#xff0c;求出一组 x i xi xi, y i yi yi&#xff0c;使其满足 a i x i b i y i g c d ( a i , b i ) aixibiyigcd(ai,bi) aixibiyigcd(ai,bi)…

Diffusion Model——扩散模型

Diffusion Model 文章目录 Diffusion ModelDenoising Diffusion Probabilistic Model(DDPM)去噪过程&#xff1a;Denoise结构训练过程Text-to-image Generation Model High Resolution Image Synthesis With_Latent Diffusion Models (Stable Diffusion)基本结构与推理过程Text…

基于scrapy框架的单机爬虫与分布式爬虫

我们知道&#xff0c;对于scrapy框架来说&#xff0c;不仅可以单机构建复杂的爬虫项目&#xff0c;还可以通过简单的修改&#xff0c;将单机版爬虫改为分布式的&#xff0c;大大提高爬取效率。下面我就以一个简单的爬虫案例&#xff0c;介绍一下如何构建一个单机版的爬虫&#…

WGS-84坐标系、东北天坐标系、载体坐标系

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、WGS-84坐标系二、东北天坐标系&#xff08;ENU&#xff09;1、站心直角坐标系2、站心极坐标系 三、载体坐标系总结 前言 作为一名智驾HIL工程师&#xff0…

My desktop didn‘t come with the Bluetooth.

You didnt turn on the Bluetooth on PC and phone.Turn on it to control your phone. My desktop didnt come with the Bluetooth. 电脑控制手机的时候&#xff0c;电脑蓝牙没打开 电脑蓝牙打开步骤 电脑蓝牙的小图标打开了 手机上可以看到计算机了【Thinkpad-T440p-zwf】 无…

Studio One 6.5下载安装激活图文教程

Studio One 6.5是由PreSonus公司打造一款功能强大的数字音乐创作软件&#xff0c;不仅为用户们提供了制作、混合、掌握和执行所有操作&#xff0c;还提供了简洁直观的主界面&#xff0c;因此使用起来也是十分的简单&#xff0c;就算是初学者也可以快速的上手使用起来&#xff0…

[计算机网络]---Http协议

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 本期学习&#xf…

云手机在引流方面有什么优势?

对于电商商家而言&#xff0c;无论是在亚马逊还是其他平台&#xff0c;有效的流量来源主要集中在短视频引流和社交电商营销。要在新兴社交平台为企业电商带来更多流量&#xff0c;不可忽视云手机的关键作用和独特优势。 云手机的定义与作用 在经营TikTok、Facebook和INS账号时&…

linux中的文件操作

linux的理念 在linux中的一切皆为文件&#xff01;&#xff01;&#xff01; 在上一篇博客中提到过&#xff0c;Linux中的桌面本质上也是一种文件&#xff0c;而现在&#xff0c;在本篇博客中要对这种理念进行进一步的提升&#xff0c;也就是在Linux系统中的一切皆为文件&#…

多线程---创建线程

1.概述 多线程是指从软件或者硬件上实现多个线程并发执行的技术。线程是程序中独立运行的程序片段&#xff0c;每个线程都有独立的执行流程&#xff0c;可以在同一时间内执行不同的任务。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程&#xff0c;进而提…

Swift 5.9 新 @Observable 对象在 SwiftUI 使用中的陷阱与解决

概览 在 Swift 5.9 中&#xff0c;苹果为我们带来了全新的可观察框架 Observation&#xff0c;它是观察者开发模式在 Swift 中的一个全新实现。 除了自身本领过硬以外&#xff0c;Observation 框架和 SwiftUI 搭配起来也能相得益彰&#xff0c;事倍功半。不过 Observable 对象…