C++取中文字符串最后一个
时间: 2024-10-09 16:16:02 浏览: 37
C++考试面试练习题.docx
在C++中,由于中文字符占用两个字节(UTF-16编码),直接通过`std::string`的`length()`或`size()`方法获取的长度会比实际字符数少。要获取包含中文字符的字符串的最后一个字符,你需要遍历整个字符串,直到找到最后一个中文字符。这里有一个简单的示例:
```cpp
#include <locale>
#include <codecvt>
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
std::string utf8String = "你好,世界"; // 假设你已经有了一个包含中文的UTF-8字符串
// 将UTF-8字符串转换为宽字符(wchar_t)
std::wstring wideString = converter.from_bytes(utf8String);
// 初始化一个位置变量和字符计数器
size_t pos = wideString.size();
size_t charCount = 0;
// 遍历宽字符串,查找最后一个中文字符
while (pos > 0 && charCount < 2) { // 中文字符通常是两个字节
if (iswcntrl(wideString[pos - 1])) {
pos--;
} else {
++charCount;
}
}
// 最后的中文字符位置减去1就是最后一个字符的实际索引
size_t lastChineseCharIndex = pos - 1;
// 如果找到了中文字符,可以打印它
if (lastChineseCharIndex != wideString.size()) {
std::wcout << wideString.substr(lastChineseCharIndex, 1) << std::endl;
} else {
std::cout << "没有找到中文字符" << std::endl;
}
```
注意,这个示例假设中文字符不包括控制字符。如果你需要更精确地检测中文字符,可能需要一个完整的Unicode范围检查。
阅读全文