- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
总体概述:
我有一个名字列表,每个名字都是一个string&
。人们想要对字符串列表执行的一个常见操作是按字母顺序对字符串进行排序。
一种方法是将两个字符串转换为相同的大小写,从每个字符串中的第一个字符开始,然后根据 if (char1 > char2)
,重复直到被比较的两个字符不相等或到达较短字符串中的最后一个字符。
Emoji 字符总是评估为...interesting... char
值,当使用上述排序算法时,emoji char 总是被排序为出现在 字母数字字符之前。
目标:在纯字母数字字符串之前或之后对表情符号字符串或仅以表情符号开头的字符串进行排序是任意的。我希望能够控制表情符号字符/字符串按字母顺序排序的位置:选择“Z”/“z”之后或“A”/“a”之前。
(我并不是说我想控制它们的排序位置以将它们放在其他任意字符(如“p”和“q”之间),我也不是说我的目标是控制如何与其他表情符号相比,表情符号是有序的,只是为了清楚起见。)
一些代码来演示:
bool compareStringsIgnoreCase(std::string& str1, std::string& str2)
{
int i = 0;
while (i < str1.length() && i < str2.length())
{
char firstChar = tolower(first[i]);
char secondChar = tolower(second[i]);
int firstCharAsInt = firstChar;
int secondCharAsInt = secondChar;
if (firstCharAsInt < secondCharAsInt)
return true;
else if (firstCharAsInt > secondCharAsInt)
return false;
i++;
}
return (str1.length() < str2.length());
}
如果使用 str1 = "Abc"
和 str2 = 👍
,那么当i = 0
,其他取值如下:firstChar = 'a'
secondChar = '\xf0'
firstCharAsInt = 97
secondCharAsInt = -16
根据这些值,firstCharAsInt > secondCharAsInt
是有意义的,因此该函数返回 true
,表情符号字符串排在“Abc”字符串之前.同样,我希望能够将表情符号按字母数字字符排序——问题是,如何排序?
我尝试了一些表情符号,它们的“char as int”值总是负数。表情符号在这方面是否与其他 char
不同?如果是这样,那可能是一个简单易行的检查,可以识别它们并将它们放在其他字符之后。也对其他方法持开放态度。
谢谢
最佳答案
表情符号是 Unicode 字符,因此假设您的字符串编码为 UTF-8,那么比较它们的最简单方法是将它们转换为 std::wstring
。 .您可以使用 std::codecvt
执行此操作.虽然这在 C++17 中已弃用,但目前没有方便的替代品。
所以,可以这样做:
#include <string>
#include <codecvt>
#include <locale>
#include <cctype>
std::wstring widen (const std::string &s)
{
std::wstring_convert <std::codecvt_utf8 <wchar_t>, wchar_t> convert;
return convert.from_bytes (s);
}
void lower_case_string (std::wstring &ws)
{
for (auto &ch : ws)
ch = tolower (ch);
}
// Return true if s1 == s2 (UTF-8, case insensitive)
bool compare (const std::string &s1, const std::string &s2)
{
std::wstring ws1 = widen (s1);
lower_case_string (ws1);
std::wstring ws2 = widen (s2);
lower_case_string (ws2);
return ws1 == ws2;
}
不过请注意,用于排序的比较函数是 s1 < s2
.
关于c++ - 当字符包含表情符号时如何比较字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55660332/
SQLite、Content provider 和 Shared Preference 之间的所有已知区别。 但我想知道什么时候需要根据情况使用 SQLite 或 Content Provider 或
警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 Backbone 中的一些注意事项,这些注意事项可能在其他地方更好地解决......不幸的是,我别无选择,只能在这里处理它们! 所以,我的
我一整天都在挣扎。我的预输入搜索表达式与远程 json 数据完美配合。但是当我尝试使用相同的 json 数据作为预取数据时,建议为空。点击第一个标志后,我收到预定义消息“无法找到任何内容...”,结果
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 Draf
这个问题已经有答案了: How can I calculate a time span in Java and format the output? (18 个回答) 已关闭 9 年前。 这是我的代码
我有一个 ASP.NET Web API 应用程序在我的本地 IIS 实例上运行。 Web 应用程序配置有 CORS。我调用的 Web API 方法类似于: [POST("/API/{foo}/{ba
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
放宽“邻居”的标准是否足够,或者是否有其他标准行动可以采取? 最佳答案 如果所有相邻解决方案都是 Tabu,则听起来您的 Tabu 列表的大小太长或您的释放策略太严格。一个好的 Tabu 列表长度是
我正在阅读来自 cppreference 的代码示例: #include #include #include #include template void print_queue(T& q)
我快疯了,我试图理解工具提示的行为,但没有成功。 1. 第一个问题是当我尝试通过插件(按钮 1)在点击事件中使用它时 -> 如果您转到 Fiddle,您会在“内容”内看到该函数' 每次点击都会调用该属
我在功能组件中有以下代码: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
我在使用预签名网址和 AFNetworking 3.0 从 S3 获取图像时遇到问题。我可以使用 NSMutableURLRequest 和 NSURLSession 获取图像,但是当我使用 AFHT
我正在使用 Oracle ojdbc 12 和 Java 8 处理 Oracle UCP 管理器的问题。当 UCP 池启动失败时,我希望关闭它创建的连接。 当池初始化期间遇到 ORA-02391:超过
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve
引用这个plunker: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview 我在 styles.css 文件和 src/app.ts 文件中指定
为什么我的条形这么细?我尝试将宽度设置为 1,它们变得非常厚。我不知道还能尝试什么。默认厚度为 0.8,这是应该的样子吗? import matplotlib.pyplot as plt import
当我编写时,查询按预期执行: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2; 但我真正想要的是右连接。当
我有以下时间数据: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
一些背景知识 -我的 NodeJS 服务器在端口 3001 上运行,我的 React 应用程序在端口 3000 上运行。我在 React 应用程序 package.json 中设置了一个代理来代理对端
我面临着一个愚蠢的问题。我试图在我的 Angular 应用程序中延迟加载我的图像,我已经尝试过这个2: 但是他们都设置了 src attr 而不是 data-src,我在这里遗漏了什么吗?保留 d
我是一名优秀的程序员,十分优秀!