gpt4 book ai didi

c++ - 对其中包含数字的字符串进行排序

转载 作者:太空狗 更新时间:2023-10-29 19:39:25 25 4
gpt4 key购买 nike

我有像 7X1234 XY1236 NM1235 这样的字符串。我想使用最后 4 个数字对这个字符串进行排序,只忽略前两个字母。另外,我想比较这些数字,看看它们是否是连续的。

我能想到的实现此目的的一种方法是将这些字符串拆分为字母和数字(7X 和 1234),然后将数字字符串词法转换为 int 并对其进行处理。但是,当数字字符串在 C++?

简而言之,如果我有 7X1234 XY1236 NM1235 BV1238,我需要得到 7X1234 NM1235 XY1236 BV1238

我没有详细说明我想知道字符串的数字部分是否是连续的。现在,当我只有 1234 1236 1235 1238 这样的整数时,我会做如下的事情

            std::vector<int> sortedDigits{1234 1235 1236 1238};
int count = 1;
int pos = 0;
std::vector<std::pair<int, int> > myVec;
myVec.push_back(std::make_pair(sortedDigits[pos], count));
for(size_t i = 1; i < sortedDigits.size(); ++i)
{
if(sortedDigits[i] != (sortedDigits[i-1] + 1))
{
count = 1;
myVec.push_back(std::make_pair(sortedDigits[i], count) );
++pos;
}
else
{
sortedDigits[pos].second = ++count;
}
}

所以最后我得到 (1234, 3)(1238, 1)

我不知道当有字符串时我怎么能得到这样的东西?

最佳答案

由于数字的字符编码值与它们所代表的数字的顺序相同,因此您可以对最后四位数字进行字符串比较:

#include <cstring>
#include <string>

// Requires: a.size() >= 2, b.size() >= 2
bool two_less(std::string const & a, std::string const & b)
{
return std::strcmp(a.data() + 2, b.data() + 2) < 0;
}

现在使用带有谓词的sort:

#include <algorithm>
#include <vector>

std::vector<std::string> data { "7X1234", "YX1236" };

std::sort(data.begin(), data.end(), two_less);

在 C++11 中,特别是如果您没有重复使用它,您也可以直接在 sort 调用中使用 lambda:

std::sort(data.begin(), data.end(),
[](std::string const & a, std::string const & b)
{ return std::strcmp(a.data() + 2, b.data() + 2) < 0; });

如果您需要改变它,您甚至可以将数字“2”设为捕获变量。

关于c++ - 对其中包含数字的字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18143353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com