提问人:温泽海 提问时间:9/27/2022 最后编辑:温泽海 更新时间:9/27/2022 访问量:58
比较 C++ 中的字符串*
Comparing string* in C++
问:
让 和 被赋予正整数。请考虑以下 C++17 代码:a
b
string* first;
first = new string[a];
//some definitions
string* second;
second = new string[b];
//some definitions
通过说字符串是未定义的,我的意思是在上面给出的创建代码之后从未对字符串进行任何定义。first[i]
first[i]
如果出现以下情况,我定义 和 是相等的:first
second
a==b
.first[i]
并且等价于每个非负整数,在以下意义上:如果未定义,则 ;if has length(其中 是非负整数),则 has length,并且与每个非负整数的 char 相同。second[i]
i<a
first[i]
second[i]
first[i]
l
l
second[i]
l
first[i][j]
second[i][j]
j<l
简而言之,我想要最普通的字符串相等,强调比较内容而不是指针。在 C++17 中执行此操作的最合适方法是什么?我尝试了多个答案,但没有一个有效。
答:
3赞
Matt Cummins
9/27/2022
#1
我假设是.string
std::string
这里真正的解决方案是使用而不是管理你自己的动态内存:std::vector<std::string>
std::vector<std::string> first;
//some definitions
std::vector<std::string> second;
//some definitions
bool equal = (first == second); // does what you want
如果由于某种原因不能使用 ,则 C 样式方法将如下所示std::vector
bool are_equal(std::string* first, std::size_t first_size, std::string* second, std::size_t second_size) {
if (first_size != second_size) return false;
for (std::size_t idx = 0; idx != first_size; ++idx) {
if (first[idx] != second[idx]) return false;
}
return true;
}
int main() {
string* first = new string[a];
//some definitions
string* second = new string[b];
//some definitions
bool equal = are_equal(first, a, second, b);
return 0;
}
使用 C++20,首选在此处使用std::span
bool are_equal(std::span<const std::string> first, std::span<const std::string> second) {
if (first.size() != second.size()) return false;
for (std::size_t idx = 0; idx != first.size(); ++idx) {
if (first[idx] != second[idx]) return false;
}
return true;
}
int main() {
string* first = new string[a];
//some definitions
string* second = new string[b];
//some definitions
bool equal = are_equal({first, a}, {second, b});
return 0;
}
上一个:如何立即检查一组对是否有逗号?
评论
first[i]
std::string
first[i]