两个字符串在 c++ 中不相等
Two string are not equal in c++
我在标记的代码行上比较 std 库中的两个字符串时遇到问题。在此行之后输出为"NO",尽管排序后的字符串相同,长度相等。在排序中,我使用了带有交换功能的气泡排序。
#include <iostream>
#include <algorithm>
#include <string>
void sort(int n, std::string s);
int main() {
std::string s1;
std::string s2;
std::getline(std::cin, s1);
std::getline(std::cin, s2);
if (s1.length() != s2.length()) {
std::cout << "NO";
} else {
sort(s1.length(), s1);
sort(s2.length(), s2);
if (s1 == s2) { // <-- !
std::cout << "YES";
} else {
std::cout << "NO";
}
}
return 0;
}
void sort(int n, std::string s) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (s[j] > s[j + 1]) {
std::swap(s[j], s[j + 1]);
}
}
}
}
您的sort
函数实际上并没有修改字符串s1
传入。您需要s
引用传入的参数:
void sort(int n, std::string &s);
现在改变s
和改变s1
是一样的.
您还需要更改函数定义中的签名。
此外,您不需要将字符串的长度传递给函数,因为字符串已经知道自己的大小:
void sort(std::string &s) {
int n = s.length();
// ...
}
字符串按值传递。副本已排序,但原件保持不变。函数的修复程序在另一个答案中。那会起作用。
另一种方法是使用 std::sort 而不是排序函数。它使用迭代器。
#include <iostream>
#include <algorithm>
#include <string>
int main() {
std::string s1;
std::string s2;
std::getline(std::cin, s1);
std::getline(std::cin, s2);
if (s1.length() != s2.length()) {
std::cout << "NO";
} else {
std::sort(s1.begin(), s1.end());
std::sort(s2.begin(), s2.end());
if (s1 == s2) { // <-- !
std::cout << "YES";
} else {
std::cout << "NO";
}
}
return 0;
}
您还可以修改排序函数以使用迭代器。
相关文章:
- 两个字符串在 c++ 中不相等
- 如何以优化的方式同时迭代两个间距不相等的数组
- 是否确保 2 个连续的 std::chrono::steady_clock::now() 不相等?
- C ++相同的字符串不相等(实际上是char*)
- 在 c++ 中比较不相等数组或字符串的方法
- C++ - 空的 std::list begin() 和 end() 不相等
- 列表大小为 1,但 front() 和 back() 不相等
- C++中[不]相等运算符的求值顺序
- 2 个指针,0 字节相差但不相等
- 将不相等的线读入向量的向量
- 如何打印一个不相等的三角形
- 为什么这两个char阵列不相等
- 不(!)和不相等(!=)之间有什么区别是C
- 为什么这些C 元组不相等
- 为什么整数的地板本身不相等(CPP)
- 当使用不相等vs均等时,是否存在任何性能差异
- 为什么这两个值在 arduino 上不相等
- 字符串在相等时比较不相等
- 将字符转换为 int 会显示不相等的数字
- glXCreateWindow在VISUAL_ID和屏幕>root_visual不相等时不起作用