正如几条评论所建议的以及 @CrisLuengo 答案所强调的,我们可以迭代字符来查找高位集中的任何字符(实时示例):
\n\n#include <iostream>\n#include <string>\n#include <algorithm>\n\nbool isASCII (const std::string& s)\n{\n return !std::any_of(s.begin(), s.end(), [](char c) { \n return static_cast<unsigned char>(c) > 127; \n });\n}\n\nint main()\n{\n std::string s1 { "C:\\\\Users\\\\myUser\\\\Downloads\\\\Hello my friend.pdf" }; \n std::string s2 { "C:\\\\Users\\\\myUser\\\\Downloads\\\\\xc3\xbc.pdf" };\n\n std::cout << std::boolalpha << isASCII(s1) << "\\n";\n std::cout << std::boolalpha << isASCII(s2) << "\\n";\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n\n\n真的
\n\n错误的
\n
ASCII 字符仅使用 a 的低 7 位char
(值 0-127)。以 UTF-8 编码的非 ASCII Unicode 字符使用的char
元素都设置了高位。因此,您可以简单地迭代char
元素,看看它们中是否有任何一个值大于 127,例如:
bool containsOnlyASCII(const std::string& filePath) {
for (auto c: filePath) {
if (static_cast<unsigned char>(c) > 127) {
return false;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
关于演员表的说明:std::string
包含char
元素。该标准没有定义char
是signed
还是unsigned
。如果是signed
,那么我们可以以unsigned
明确定义的方式将其转换为 。该标准具体规定了如何做到这一点。
归档时间: |
|
查看次数: |
6563 次 |
最近记录: |