字符串排序(牛客)

2023-05-16

题目描述:

编写一个程序,将输入字符串中的字符按如下规则排序。
规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
如,输入: Type 输出: epTy
规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入: BabA 输出: aABb
规则 3 :非英文字母的其它字符保持原来的位置。
如,输入: By?e 输出: Be?y 
注意有多组测试数据,即输入有多行,每一行单独处理(换行符隔开的表示不同行)

输入:输入字符串

A Famous Saying: Much Ado About Nothing (2012/8).

输出:输出字符串

A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).

做题思路:

建立一个结构体数组,单个结构体包含:字符原型,字符转换值,字符在原字符串中的位置

struct Letter{
    char source; //提取出来时的字符原型,排序后重新写入str
    char trans; //统一转换为小写字母,进行一级排序
    int index; //在输入字符串中的位置,用于同级字母的二级排序 
};

遍历字符串

遇到小写字母,例如a时,source是a,trans是a,index就是a在字符串中的位置

遇到大写字母,例如A时,source是A,trans是a,index就是A在字符串中的位置

遇到其他字符,不加入结构体数组

对结构体数组进行二级排序(见sort排序),trans不同时,按照字典排序。当trans相同时,按照index进行排序

排序完成后,将source写回输入字符串对应的index处即可

AC代码:

// 使用二级结构体排序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<vector>
using namespace std;
struct Letter{
    char source; //提取出来时的字符原型,排序后重新写入str
    char trans; //统一转换为小写字母,进行一级排序
    int index; //在输入字符串中的位置,用于同级字母的二级排序 
};
int isLetter(char c);
bool cmp(Letter a,Letter b);
int main()
{
    char str[1000]; //注意本题100的空间不够,会提示通过20%,发生段错误
    while(gets(str)){
    	vector<Letter> letter;
	    for(int i=0; i<strlen(str); i++){  //将字符串中的字母提取出来,并添加到vector
	    	Letter l;
	        if( isLetter(str[i])==1 ){
	            l.source = str[i];
	            l.trans = str[i];
	            l.index = i; 
	            letter.push_back(l);
	        }
	        if( isLetter(str[i])==2 ){
	            l.source = str[i];
	            l.trans = str[i]+32;
	            l.index = i;
	            letter.push_back(l);
	        }
	    }
	    sort(letter.begin(),letter.end(),cmp);
	    for(int i=0; i<strlen(str); i++){  //将排序后的字母重新写回str 
	    	if(isLetter(str[i])){
	    		str[i] = letter[0].source;
	    		letter.erase(letter.begin());
			}
		}
	    printf("%s\n",str);
	}
    return 0;
}
int isLetter(char c)//小写字母返回1,大写字母返回2,否则返回0
{
    if( c>='a'&&c<='z'){
        return 1;
    }
    if( c>='A'&&c<='Z' ){
        return 2;
    }
    return 0;
}
bool cmp(Letter a,Letter b) //用于sort二级排序 
{
	if( a.trans!=b.trans ){ //不同级字母,对转换后的小写字母按照字典排序 
		return a.trans<b.trans; 
	}else{ //同级字母,按照index进行排序 
		return a.index<b.index;
	}
}

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字符串排序(牛客) 的相关文章

  • 判断一个对象是否为数组的4种方法

    问题描述 在js中判断数据类型通常使用typeof xff0c 但是typeof在判断数组和对象时的结果都是object console span class token punctuation span span class token
  • 去重三种方法

    数组去重三种方法 问题情境 去除数组中重复的元素 输出不重复的元素数组 思路方向 将数组中重复的元素删除将数组中不重复的元素取出利用其它 JavaScript 特性和 API 直接去重 这一思路中有些 API 涉及ES6中的某些知识暂不提及
  • 百度地图API简介

    百度地图API 简介 百度地图API是百度地图开放平台面向广大政府 企业 互联网等开发者开放的免费地图服务 拥有定位 地图 导航 轨迹 路况 路线规划 搜索 xff0c 七大基础地图服务能力 xff0c 并将七大服务能力开放给各行业开发者使
  • svg和canvas的区别简析

    Canvas和SVG是html5中支持2种可视化技术 xff0c 都是可以在画布上绘制图形和放入图片 下面来介绍和分析一下他们 一 Canvas 和 SVG 简介 1 什么是Canvas xff1f Canvas 是H5新出来的标签 Can
  • 微信小程序:实现长按扫描二维码

    小程序内置扫描二维码 image 使用小程序提供的image组件 xff0c image组件上有一个show menu by longpress的属性 xff0c 设置为true lt image show menu by longpres
  • 微信小程序:小程序常见问题及解决方案

    文章目录 原生组件显示在遮罩层上面的问题scroll view高度适配问题表单控件聚焦后页面上推问题小程序web view页面返回到小程序页面 原生组件显示在遮罩层上面的问题 在小程序中使用原生的表单组件时 xff0c 在有弹出框出现的情况
  • Echarts:惊艳的Map

    大家在网上看天气预报的时候应该就看到过在中国地图上显示不同省份的温度 xff0c 并根据温度的高低显示不同的颜色 xff0c 又或者看到各个省份的新冠肺炎新增人数 xff0c 根据不同的新增人数显示不同的颜色之类的图像 这些 xff0c 使
  • 微信小程序性能优化

    文章目录 小程序优化首屏加载优化白屏优化运行时性能渲染性能优化页面切换优化 小程序优化 首屏加载优化 删除无用代码 资源文件 开启按需加载组件 span class token comment app json span span clas
  • webStorage

    cookie 在webStorage出现之前在浏览器端存储数据通常使用cookie cookie是某些网站为了辨别用户身份 xff0c 进行Session跟踪而储存在用户本地终端上的数据 xff08 通常经过加密 xff09 xff0c 由
  • alembic 命令的使用

    初始化 alembic init alembic 查看历史head alembic span class token function history span span class token operator span span cla
  • centos 6 镜像源不再可用

    2020 12 02 centos 停止更新centos 6 xff0c 官网镜像源不可用 http mirror centos org centos 6 6 readme This directory and version of Cen
  • Linux安装配置vnc

    1 检测 vnc有没有安装 rpm qa grep tigervnc 或 rpm qa grep vnc 显示如下信息 xff0c 证明 vnc已经安装 1 1 若未安装 xff0c 安装步骤如下 1 1 1 cd 到 vnc 安装包目录下
  • shell变量的五种赋值方式

    shell变量的赋值https blog 51cto com u 14881361 2673174 一 直接赋值 格式为 xff1a 变量名 61 变量值 x1f416 直接赋值时禁止在 等号 61 两端添加空格 span class to
  • CommonJS和ES6模块化的区别

    ES6 模块与 CommonJS 模块存在以下差异 xff1a 1 语法上 CommonJS 使用的是 module exports 61 导出一个模块对象 xff0c require file path 引入模块对象 xff1b ES6使
  • bug解决: Cause: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 6; 不允许有匹配 “[xX][mM][lL]“ 的

    Exception encountered during context initialization span class token operator span cancelling refresh attempt span class
  • 云计算基础

    待到秋来九月八 xff0c 我花开后百花杀 数据中心发展阶段企业自建EDCIDC托管 租用云计算三者对比 云计算核心特征云计算参考模型云计算的关键特点按需服务资源池化弹性扩展泛网络访问服务可度量 云计算服务模式云计算技术架构云计算的4个部署
  • 前端npm或yarn装包踩坑——安装超时失败,设置镜像源不生效

    问题描述 xff1a 使用npm或yarn进行安装依赖包时 xff0c 无响应超时 xff0c 随即设置镜像源指向淘宝镜像 xff0c 但始终不生效 问题原因 xff1a 无响应 网络等原因 xff0c 导致npm或yarn装包失败 xff
  • Ubuntu中安装ClamAV防病毒软件

    环境 Ubuntu 16 04 软件安装 ClamAV http www clamav net documents installing clamav 源码链接 http www clamav net downloads productio
  • 使用Windows远程桌面工具来远程连接控制Ubuntu系统

    转载来源 xff1a 使用Windows远程桌面工具来远程连接控制Ubuntu系统 xff1a http www safebase cn article 258275 1 html 介绍 有时需要在实际的电脑上安装Ubuntu的操作系统来搭
  • 软件工程简答题和应用题

    1 简述软件工程过程的含义 目的以及包含的子过程 2 数据字典的作用是什么 xff0c 它有哪些条目 xff1f 3 简述结构化程序设计方法的基本要点 4 简述原型的开发步骤 5 什么是需求规约 xff1f 简述需求规约的基本性质 答 xf

随机推荐

  • MFC用对话框获取输入

    题目 在MFC调用对话框读入数据 xff0c 并在客户区输出 这是 计算机图形学基础教程 的一个习题 xff1a 使用MFC设计一个长方形类CRectangle xff0c 调用对话框读入长方形的长度和宽度 xff0c 在客户区输出长方形的
  • openssl 命令行 sm4 加解密

    sms4 算法标准数据实例 密钥 xff1a 0123456789abcdeffedcba9876543210 明文 xff1a 0123456789abcdeffedcba9876543210 密文 xff1a 681edf34d2069
  • 计算一个神经网络的输出(Computing a Neural Network's output)

    计算一个神经网络的输出 xff08 Computing a Neural Network s output xff09 Note 在编程实现一个神经网络的时候 xff0c 有一个注意点就是我们要记得保存每一步计算出来的 z z z 和 a
  • L2正则化(Regularization)

    正则化 xff08 Regularization xff09 深度学习可能存在过拟合问题 高方差 xff0c 有两个解决方法 xff0c 一个是正则化 xff0c 另一个是准备更多的数据 xff0c 这是非常可靠的方法 xff0c 但你可能
  • OpenCV--图像转化为灰度图、HSV图

    OpenCV 图像转化为灰度图 HSV图 一 灰度图 以下介绍转载自 xff1a https www cnblogs com xiejiulong p 3821620 html 图像灰度值的概念是什么 xff1f 灰度也可以认为是亮度 xf
  • python -- 定义函数 def 后面的 ->,:表示的含义

    python 定义函数 def 后面的 gt xff0c xff1a 表示的含义 gt 常常出现在python函数定义的函数名后面 xff0c 为函数添加元数据 描述函数返回的类型 表示参数的类型建议符 示例 xff1a span clas
  • 解决QT 编译QWebEngineWidgets出现错误Project ERROR: Unknown module(s) in QT: webenginewidgets问题

    解决QT 编译QWebEngineWidgets出现错误Project ERROR Unknown module s in QT webenginewidgets问题 1 确认你的QT版本号为QT5 4 43 xff0c 在此之后的版本Qt
  • C++ 类中特殊成员变量(常量、静态、引用)的初始化方法

    有些成员变量的数据类型比较特别 xff0c 它们的初始化方式和普通数据类型的成员变量有所不同 这些特殊类型的数据类型包括 xff1a 引用 xff08 amp xff09 常量 xff08 const xff09 静态 xff08 stat
  • 自编码器(AutoEnconders:AE)解释

    概述 自编码器是一种能够通过无监督学习 xff0c 学到输入数据高效表示的神经网络 输入数据的这一高效表示 xff08 特征 xff09 称为编码 xff08 Codings xff09 xff0c 其维度一般远小于输入数据 xff0c 使
  • Model-Agnostic Meta-Learning (MAML)模型介绍及算法详解

    整理自 xff1a Frank Tian 回答 首先 xff0c 我们先从Meta Learning的概念说起 原始的机器学习的流程被认为是下面这这样的 xff1a 也就是我们根据我们先验知识设计网络架构和参数初始化方法 xff0c 从Tr
  • Django的STATIC_URL、STATIC_ROOT、STATICFILES_DIRS、MEDIA_URL、MEDIA_ROOT意义、设置和使用

    以下经验是在Django2 1 1及Python3 5环境下 xff08 项目目录结构见结尾 xff09 1 STATIC ROOT 首先 xff0c 要有Django的开发模式和部署模式的概念 xff08 目前知道有这种东西就行 xff0
  • CSDN的富文本编辑器的自动保存说明

  • powershell中 find 命令报参数格式不正确

    在cmd命令行中查看本地网络连接数 netstat ant find C 34 192 34 注意必须加上引号 xff0c 否则包参数格式不正确 同样的命令在powershell 重执行报参数格式不正确 因为在powershell中使用带双
  • 识别有效的IP地址和掩码进行分类统计(牛客)

    题目描述 xff1a 请解析IP地址和对应的掩码 xff0c 进行分类识别 要求按照A B C D E类地址归类 xff0c 不合法的地址和掩码单独归类 所有的IP地址划分为 A B C D E五类 A类地址1 0 0 0 126 255
  • 整数与IP地址间的转换(牛客)

    题目描述 xff1a 原理 xff1a ip地址的每段可以看成是一个0 255的整数 xff0c 把每段拆分成一个二进制形式组合起来 xff0c 然后把这个二进制数转变成 一个长整数 举例 xff1a 一个ip地址为10 0 3 193 每
  • C++中的qsort、sort排序

    注意 xff1a int char string之类的是可以之间使用 gt lt 61 61 之类的进行判断 xff0c char 类型的使用strcmp就行了 而struct与vector都可以当做数组进行处理 xff0c cmp函数传递
  • 迷宫问题(牛客)

    题目描述 xff1a 定义一个二维数组N M xff08 其中2 lt 61 N lt 61 10 2 lt 61 M lt 61 10 xff09 xff0c 如5 5数组下所示 xff1a int maze 5 5 61 0 1 0 0
  • 查找兄弟单词(牛客)

    题目描述 xff1a 兄弟单词 xff1a 给定一个单词X xff0c 如果通过任意交换单词中字母的位置得到的新的单词Y xff0c 那么称X和Y是兄弟单词 注意 xff1a bca和abc是兄弟单词 xff0c abc和abc是相同单词
  • 合唱团(牛客)

    题目描述 xff1a 计算最少出列多少位同学 xff0c 使得剩下的同学排成合唱队形 说明 xff1a N位同学站成一排 xff0c 音乐老师要请其中的 N K 位同学出列 xff0c 使得剩下的K位同学排成合唱队形 合唱队形是指这样的一种
  • 字符串排序(牛客)

    题目描述 xff1a 编写一个程序 xff0c 将输入字符串中的字符按如下规则排序 规则 1 xff1a 英文字母从 A 到 Z 排列 xff0c 不区分大小写 如 xff0c 输入 xff1a Type 输出 xff1a epTy 规则