C++:比较字符串或包含特殊字符(á、é、ő 等)的字符串或 wstring )
C++: Comparing strings or wstrings with special characters in them (á, é, ő, etc.)
我最近接到一个作业,要求我比较单词。我不想完整地描述它,但我必须逐个比较这两个词,看看这两个词有多相似。
现在的问题是我必须使用的输入文本包含很多非标准字符,如 á、é、ő 等。我尝试使用字符串、wstring、char 和 wchar_t 来表示我的单词,但似乎没有任何工作正常。举个例子:
setlocale(LC_ALL, "");
std::vector <Word::Word> words;
std::wfstream fileWrite("testout.txt");
std::wstring s = words[0].getString();
fileWrite << s;
我们的字符串在这里包含单词"Még"。它正确输出。作为记录,如果我使用字符串而不是 wstring,一切都是一样的。以下也有效:
const wchar_t* wc = s.c_str();
fileWrite << wc;
但是一旦我尝试引用字符,它就会给我胡言乱语。例:
fileWrite << wc[0] << " " << wc[1];
这将输出"ď »"。我猜问题是他们使用多个字节来存储字符?我只是在这里疯狂猜测,但这将解释为什么
wcslen(wc);
返回 7。
我尝试将 substr 函数与字符串和 wstring 一起使用,但通常似乎不起作用。有人知道如何解决这个问题吗?我在这里错过了一些明显的东西吗?
另外,我正在将代码块与 gcc 编译器一起使用,我在某处读过它不能很好地处理 wchar 和 wstring,这可能是问题所在吗?请记住,我已经用字符串而不是 wstring 尝试了上面的所有内容,结果是一样的。
非常感谢大家的帮助,将不胜感激!
这些字符并不罕见。它们绝对是标准的 Unicode 字符。不幸的是,普通标准C++对Unicode的更精细细节没有任何支持。你的选择是找到一个很好的库支持它(例如,对于在MacOS X或iOS上运行的代码,你只会使用操作系统中内置的内容,其他操作系统可能有类似的支持),或者去 www.unicode.org 下载他们的代码表。并阅读您可以找到的所有信息。
wchar 和 wstring 本质上是不可移植的。最好的办法是使用 UTF-8 编码和标准 std::string。理解 UTF-8 对于当今的任何程序员来说都是绝对必要的。
这里有一些关于记事本的讨论。许多软件写入 UTF-8 之前都有一个字节顺序标记 (BOM),许多软件使用它来识别 UTF-8。如果该字节顺序标记不存在,则它们会查看单个字节。文件可能仅由 ASCII 字符组成,在这种情况下,它是什么编码并不重要。如果不仅仅是 ASCII,则包含非 ASCII 字符的 Windows-1252 编码文件是合法 UTF-8 的可能性几乎为零。
- 在 C++ 中将 utf8 wstring 转换为窗口中的字符串
- 使用 ReadProcessMemory() 将未知大小的字符数组或字符串读入 wstring 中
- 提升程序参数可以解析WSTRING,但将其迫使其施加到字符串中
- 从相同的硬编码字符串文字初始化std::string和std::wstring
- 转换一个带有UTF8 WSTRING控制台的装饰的字符串
- 如何将平台^字符串转换为wstring,然后与L字符串连接
- C++ 字符串 - 如何为 wstring 实现此'IsEmptyOrSpace(string)'方法?
- 在窗口上将格式化的 C 字符串和参数转换为 wstring
- 字符串到Wstring C++Visual Studio
- C++:比较字符串或包含特殊字符(á、é、ő 等)的字符串或 wstring )
- 使用字符串构造函数从wstring转换为字符串时,是否没有可能的数据丢失
- C++错误(将 wstring 转换为字符串):无法将参数 1 从 std::wchar_t 转换为 std::char
- 如何将uint16_t转换为宽字符串(std::wstring)
- 字符集在字符串和 wstring 中的存储方式
- C++将字符串转换为 wstring 并使用最小代码返回
- 将字符串转换为wstring[不带区域设置的俄语符号::global]
- 火鸟在“UTF8 字符串转换为 wstring”时崩溃
- 获取std::wstring的子字符串
- 如何连接字符串和wstring
- 如何将C++dll中的unicode字符串/wstring/CStringW返回到InstallScript