c++比较包含中英文的字符串
时间: 2023-08-20 16:19:02 浏览: 188
在比较包含中英文的字符串时,需要注意中文字符的编码问题。一种简单的实现方式是将中文字符串转换为 Unicode 编码,然后按照 Unicode 编码逐个比较字符。下面是一个示例代码:
```c++
#include <iostream>
#include <string>
#include <locale>
int main() {
std::wstring str1 = L"你好世界";
std::wstring str2 = L"hello world";
std::locale loc("");
// 按照 Unicode 编码比较字符
for (size_t i = 0; i < str1.length() && i < str2.length(); i++) {
if (str1[i] != str2[i]) {
std::wcout << "不相等" << std::endl;
return 0;
}
}
std::wcout << "相等" << std::endl;
return 0;
}
```
这个示例代码中,我们使用了 wstring 类型来表示字符串,并且使用了 std::locale 类型来设置本地化环境,以正确处理中文字符。在比较字符时,我们逐个比较字符的 Unicode 编码,如果有不相等的字符,则认为字符串不相等。
相关问题
C++ 分割中英文混合字符串
在C++中,可以使用std::wstring和std::wistringstream以及iswalpha函数来分割中英文混合字符串。以下是一个简单的示例:
```c++
#include <iostream>
#include <string>
#include <sstream>
#include <locale>
int main() {
std::wstring str = L"这是一段English和中文混合的字符串。";
std::wistringstream iss(str);
std::wstring word;
// 设置本地化环境,用于判断是否是中文字符
std::locale loc("");
while (iss >> word) {
std::wstring eng, chn;
for (wchar_t c : word) {
if (iswalpha(c)) {
eng += c;
} else if (std::iswctype(c, std::iswctype::wctype("CJK"), loc)) {
chn += c;
}
}
std::wcout << "英文单词:" << eng << std::endl;
std::wcout << "中文字符:" << chn << std::endl;
}
return 0;
}
```
在上面的示例中,我们首先创建一个std::wstring类型的字符串,并使用std::wistringstream把它转换为std::wstring类型的输入流。然后,我们使用std::locale设置本地化环境,以便使用iswalpha和iswctype函数来判断字符是否是英文字符和中文字符。
在循环中,我们使用std::wstring类型的word变量逐个读取输入流中的单词。对于每个单词,我们遍历它的每个字符,如果字符是英文字符,则把它加入到std::wstring类型的eng变量中,如果字符是中文字符,则把它加入到std::wstring类型的chn变量中。最后,我们输出英文单词和中文字符。
注意,上面的示例仅供参考,实际上,你需要根据你的具体需求来分割中英文混合字符串。
c++使用stl比较包含中英文的字符串
在 C++ 的 STL 中,可以使用 std::wstring 和 std::wstring_view 类型来表示 Unicode 编码的字符串,并且可以使用 std::locale 类型来设置本地化环境,以正确处理中文字符。下面是一个示例代码:
```c++
#include <iostream>
#include <string>
#include <locale>
int main() {
std::wstring str1 = L"你好世界";
std::wstring str2 = L"hello world";
std::locale loc("");
// 按照 Unicode 编码比较字符串
if (str1.compare(str2) == 0) {
std::wcout << "相等" << std::endl;
} else {
std::wcout << "不相等" << std::endl;
}
// 比较字符串的一部分
std::wstring_view str1_view(str1);
std::wstring_view str2_view(str2);
if (str1_view.substr(0, 2).compare(str2_view.substr(0, 2)) == 0) {
std::wcout << "前两个字符相等" << std::endl;
} else {
std::wcout << "前两个字符不相等" << std::endl;
}
return 0;
}
```
这个示例代码中,我们使用了 std::wstring 类型来表示字符串,并且使用了 std::locale 类型来设置本地化环境,以正确处理中文字符。在比较字符串时,我们使用了 std::wstring 的 compare 函数来比较两个字符串是否相等。如果要比较字符串的一部分,则可以使用 std::wstring_view 类型来表示子字符串,并且使用 substr 函数来获取子字符串,然后再使用 compare 函数来比较子字符串是否相等。
阅读全文