Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何用unicode字符替换特定ascii字符的所有匹配项(在std::string中)_C++_String_Replace_Unicode - Fatal编程技术网

C++ 如何用unicode字符替换特定ascii字符的所有匹配项(在std::string中)

C++ 如何用unicode字符替换特定ascii字符的所有匹配项(在std::string中),c++,string,replace,unicode,C++,String,Replace,Unicode,如何用unicode字符替换std::string中出现的每个特定ascii字符 我正在尝试(以em dash为例) 我当然可以写一个循环,但我希望有一个单一的标准函数可用于此。我知道修改后的字符串将比原始字符串长 这似乎是一个愚蠢的基本问题,但一个小时的谷歌搜索解决了这个问题。boost,哦,是的,成功了 #include <boost/algorithm/string/replace.hpp> ... boost::replace_all(mystring, " &qu

如何用unicode字符替换std::string中出现的每个特定ascii字符

我正在尝试(以em dash为例)

我当然可以写一个循环,但我希望有一个单一的标准函数可用于此。我知道修改后的字符串将比原始字符串长


这似乎是一个愚蠢的基本问题,但一个小时的谷歌搜索解决了这个问题。

boost,哦,是的,成功了

#include <boost/algorithm/string/replace.hpp>
...
boost::replace_all(mystring, " ", "—");

std::string
只知道任意
char
元素,而不知道那些
char
s实际上代表什么。您有责任决定将
std::string
的内容编码为什么字符集,然后在同一字符集中编码Unicode字符。例如,在UTF-8中,
-
(U+2014 EM破折号)是3
char
s:
0xE2 0x80 0x94
,但在Windows-125x字符集中它只有1
char
0x97

您可以使用
std::string::find()
方法查找1-
char
ASCII字符的索引,然后使用
std::string::replace()
方法替换
char
编码的Unicode字符,例如:

string mystring=。。。;
字符串替换=…;//“\xE2\x80\x94”、“\x97”等。。。
字符串::size\u type pos=0;
while((pos=mystring.find(“”,pos))!=string::npos){
mystring.replace(位置1,replacement);
pos+=替换。大小();
}

从本质上讲,C++不提供任何处理Unicode字符串的工具。它以字节为单位处理字符串,这只适用于ascii。你需要一些Unicode库。
std::string
确实不支持Unicode。基本类型是
char
,并且
string
希望每个元素都是它自己的独特标志符号,而不像unicode,在unicode中,多个元素可以组合成一个标志符号“具有unicode字符”-unicode字符的长度是多少?您应该知道,
C++
有unicode字符串literLa,您很可能熟悉,
codevt
。你有什么问题吗?@BoBTFish谢谢。我将调查boost是否有。相关:
#include <boost/algorithm/string/replace.hpp>
...
boost::replace_all(mystring, " ", "—");
string tmp;
std::regex_replace(back_inserter(tmp), mystring.begin(), mystring.end(), std::regex(" "), "—");
mystring = tmp;