两个字符串在 c++ 中不相等

Two string are not equal in c++

本文关键字:c++ 不相等 字符串 两个      更新时间:2023-10-16

我在标记的代码行上比较 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;
}

您还可以修改排序函数以使用迭代器。