目录
ASCII 值
问题陈述
问题解释
解决方案 1 使用频率向量
算法
示例
输出
上述代码的复杂性
解决方案 2 使用内置排序功能的解决方案
结论
首页 后端开发 C++ 按字符的ASCII值对字符串进行排序

按字符的ASCII值对字符串进行排序

Sep 07, 2023 pm 08:29 PM
字符 ascii 排序

按字符的ASCII值对字符串进行排序

ASCII 值

ASCII(美国信息交换标准代码)是计算机和互联网上文​​本数据最常见的字符编码格式。在标准 ASCII 编码数据中,256 个字母、数字或特殊附加字符和控制代码都有唯一值。

问题陈述

现在,在这个问题中,我们需要根据字符的 ASCII 值按升序找到排序后的字符串,其中该字符串将是用户给我们的输入。让我们看看应该如何解决这个问题。

让我们尝试借助一些示例来理解这个问题。

输入 - s = "$%7wjk()"

输出 - “$%()7jkw”

说明 - 给定字符串的字符的 ASCII 值如下 -

$ -> 36
% -> 37
( -> 40
) -> 41
7 -> 55
j -> 106
k -> 107
w -> 119
登录后复制

因此,按照 ASCII 代码值的递增顺序,字符串将变为“$%()7jkw”

输入 - s = "#m 0f )nk"

输出 - “#)0fkmn”

说明 - 给定字符串的字符的 ASCII 值如下 -

(space) -> 32
# -> 35
) -> 41
0 -> 48
f -> 102
k -> 107
m -> 109
n -> 110
登录后复制

因此,按照 ASCII 代码值的递增顺序,字符串将变为“#)0fkmn”

问题解释

让我们尝试了解问题并找到解决方案。我们知道 ASCII 表中有 256 个字符,其中每个字符都有唯一的值或位置。所以我们的基本目标是对字符进行相应的排序。我们可以通过使用可用于实现我们的目标的外部函数来使用内置排序函数。另一种方法是创建频率向量并将每个字符的频率存储在该数组中。使用这个频率向量和 ASCII 值,我们可以获得新的字符串。

解决方案 1 使用频率向量

算法

  • 创建一个大小为 256 的频率向量,因为 ASCII 表中的字符总数为 256,并以零开始整个向量

  • 运行循环来存储给定字符串的每个字符的频率

  • 现在定义一个最初为空的输出字符串

  • 运行另一个循环来遍历频率向量,因此我们可以通过对第 i 个位置Frequency_vector[i]进行类型转换来获得输出字符串

  • 返回输出字符串作为最终结果

示例

下面是上述方法的 C++ 程序实现:

#include <bits/stdc++.h>
using namespace std;
// Function to Sort the string as per ASCII values of the characters
string Helper(string s){
    // Define the size of the given string
	int size = s.length();
	// Define a frequency vector of size 256, which is the same as the size of the characters as per the ASCII table, and initiate the value of the vector as 0
	vector<int> v(256, 0);
	// Run a loop to count the frequency of each character of the string
	for (int i = 0; i < size; i++) {
		v[s[i]]++;
	}	
	// Declare a string, initially empty, to find the final output
	string ans = "";
	// Run another loop to get the final output in accordance with the ASCII table
	for (int i = 0; i < 256; i++) {
		for (int j = 0; j < v[i]; j++)
		// Typecast the integer value to the character value to include it in the loop
			ans = ans + (char)i;
	}
	// Return the final output
	return ans;
}
int main(){
    // Give input as a string by the user
	string s = "$%7wjk()";
	// Call Helper function to perform the remaining tasks
	cout<< "The sorted string as per ASCII values of the characters is: " << Helper(s);
	return 0;
}
登录后复制

输出

The sorted string as per ASCII values of the characters is: $%()7jkw
登录后复制
登录后复制

上述代码的复杂性

  • 时间复杂度 - O(n);其中 n 是字符串的大小。这里,实际的时间复杂度是 O(n * 256),但我们可以将其视为 O(n),因为 256 可以视为常数,比如 k,而 O(k * n) 仅视为 O(n)。

  • 空间复杂度 - O(256);因为这里唯一占用的额外空间是频率数组的空间,其大小为256。

解决方案 2 使用内置排序功能的解决方案

算法

  • 定义一个外部比较函数,用于排序函数中,根据 ASCII 值对字符进行排序,即返回 int 类型转换值小于其他字符的字符。

  • 现在,在辅助函数中使用内置排序函数并使用额外参数(比较函数)来正确获取顺序。

  • 调用辅助函数并获取最终的字符串输出。

示例

#include "bits/stdc++.h"
using namespace std;
// Comparison Function to sort the string as per ASCII values of the characters
bool comparison(char ch1, char ch2){ 
    return int(ch1) <= int(ch2);
}
// Function to sort the string as per ASCII values of the characters
string Helper(string s){
	// Sort the string s with the help of the inbuilt function sort()
	sort(s.begin(), s.end(), comparison);
	// Return the final output string s
	return s;
}
int main(){
    // Give input as a string by the user
	string s = "$%7wjk()";
	// Call Helper function to perform the remaining tasks
	cout<< "The sorted string as per ASCII values of the characters is: " << Helper(s);
	return 0;
}
登录后复制

输出

The sorted string as per ASCII values of the characters is: $%()7jkw
登录后复制
登录后复制

上述代码的复杂性

  • 时间复杂度:O(log(n));众所周知,内置排序函数需要 O(n * log(n)) 时间来执行代码。在这种方法中,我们通过使用附加比较函数来使用内置排序函数,该比较函数将根据该函数对字符进行排序。

  • 空间复杂度:O(1);在上面的代码中,我们没有在某些数据结构中存储任何变量。

结论

在本文中,根据字符的 ASCII 值按升序查找排序后的字符串。我们可以通过两种方法来解决这个问题。首先,我们可以制作一个大小为256(与ASCII表中的字符数相同)的频率向量,并存储每个字符的所有频率,然后从后面遍历就可以得到所需的字符串。另一种方法可以借助内置排序函数,并借助排序函数中传递的额外参数。

以上是按字符的ASCII值对字符串进行排序的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何在Windows 11/10中按拍摄日期对照片进行排序 如何在Windows 11/10中按拍摄日期对照片进行排序 Feb 19, 2024 pm 08:45 PM

本文将介绍如何在Windows11/10中根据拍摄日期对图片进行排序,同时探讨如果Windows未按日期排序图片应该如何处理。在Windows系统中,合理整理照片对于方便查找图像文件至关重要。用户可以根据不同的排序方式(如日期、大小和名称)来管理包含照片的文件夹。此外,还可以根据需要设置升序或降序排列,以便更灵活地组织文件。如何在Windows11/10中按拍摄日期对照片进行排序要按在Windows中拍摄的日期对照片进行排序,请执行以下步骤:打开图片、桌面或放置照片的任何文件夹在功能区菜单中,单

如何在Outlook中按发件人、主题、日期、类别、大小对电子邮件进行排序 如何在Outlook中按发件人、主题、日期、类别、大小对电子邮件进行排序 Feb 19, 2024 am 10:48 AM

Outlook提供了许多设置和功能,可帮助您更有效地管理工作。其中之一是排序选项,可让您根据需要对电子邮件进行分类。在这个教程中,我们将学习如何利用Outlook的排序功能,根据发件人、主题、日期、类别或大小等条件对电子邮件进行整理。这将让您更轻松地处理和查找重要信息,提高工作效率。MicrosoftOutlook是一个功能强大的应用程序,可以方便地集中管理您的电子邮件和日历安排。您可以轻松地发送、接收和组织电子邮件,而内置的日历功能也让您能够方便地跟踪您即将面临的活动和约会。如何在Outloo

PHP开发:如何实现表格数据排序和分页功能 PHP开发:如何实现表格数据排序和分页功能 Sep 20, 2023 am 11:28 AM

PHP开发:如何实现表格数据排序和分页功能在进行Web开发中,处理大量数据是一项常见的任务。对于需要展示大量数据的表格,通常需要实现数据排序和分页功能,以提供良好的用户体验和优化系统性能。本文将介绍如何使用PHP实现表格数据的排序和分页功能,并给出具体的代码示例。排序功能实现在表格中实现排序功能,可以让用户根据不同的字段进行升序或降序排序。以下是一个实现表格

C++程序:按字母顺序重新排列单词的位置 C++程序:按字母顺序重新排列单词的位置 Sep 01, 2023 pm 11:37 PM

在这个问题中,一个字符串被作为输入,我们必须按字典顺序对字符串中出现的单词进行排序。为此,我们为字符串中的每个单词(之间用空格区分)分配一个从1开始的索引,并以排序索引的形式获得输出。String={“Hello”,“World”}“Hello”=1“World”=2由于输入字符串中的单词已按字典顺序排列,因此输出将打印为“12”。让我们看看一些输入/结果场景-假设输入字符串中的所有单词都相同,让我们看看结果-Input:{“hello”,“hello”,“hello”}Result:3获得的结

Java中的Arrays.sort()方法如何按照自定义比较器对数组进行排序? Java中的Arrays.sort()方法如何按照自定义比较器对数组进行排序? Nov 18, 2023 am 11:36 AM

Java中的Arrays.sort()方法如何按照自定义比较器对数组进行排序?在Java中,Arrays.sort()方法是一个非常有用的方法,可以对数组进行排序。默认情况下,该方法会按照升序排序。但是有时候,我们需要按照自己定义的规则对数组进行排序。这时,就需要用到自定义比较器(Comparator)。自定义比较器是一个实现了Comparator接口的类,

正确在matplotlib中显示中文字符的方法 正确在matplotlib中显示中文字符的方法 Jan 13, 2024 am 11:03 AM

在matplotlib中正确地显示中文字符,是很多中文用户常常遇到的问题。默认情况下,matplotlib使用的是英文字体,无法正确显示中文字符。为了解决这个问题,我们需要设置正确的中文字体,并将其应用到matplotlib中。下面是一些具体的代码示例,帮助你正确地在matplotlib中显示中文字符。首先,我们需要导入需要的库:importmatplot

wps怎么排序成绩高低 wps怎么排序成绩高低 Mar 20, 2024 am 11:28 AM

在我们的工作中,经常会用到wps软件,wps软件处理数据的方式方法是非常多的,而且函数功能也是非常强大的,我们经常用函数来求平均值,求汇总等,可以说只要是统计数据能用的方法,wps软件库里都已经为大家准备好了,下面我们要介绍的是wps怎么排序成绩高低的操作步骤,看完以后大家可以借鉴一下经验。1、首先打开需要排名的表格。如下图所示。  2、然后输入公式=rank(B2,B2:B5,0),一定要输入0。如下图所示。  3、输入完公式以后,按下电脑键盘上的F4键,这步操作是为了让相对引用变为绝对引用。

快速了解 PHP 中的 ASCII 数值转换 快速了解 PHP 中的 ASCII 数值转换 Mar 28, 2024 pm 06:42 PM

PHP中的ASCII数值转换是编程中经常会遇到的问题。ASCII(AmericanStandardCodeforInformationInterchange)是一种用于将字符转换为数字的标准编码系统。在PHP中,我们经常需要通过ASCII码来实现字符和数字之间的转换。本文将介绍如何在PHP中进行ASCII数值转换,并给出具体的代码示例。一、将字符

See all articles