【发布时间】:2015-07-01 02:28:51
【问题描述】:
我在 cpp 中有一个要求,我们需要在传入的字符串中搜索一些模式并需要用相应的值替换。这里是棘手的部分,传入的字符串可以包含特殊字符(如°等),模式可以是单个字符或字符组。最初想在 Map 中存储模式字符串和替换值,但我遇到了特殊字符的问题,请告诉我解决此问题的正确方法。
示例:° 需要替换为“度”
int main() {
map<string,string> tempMap;
pair<string,string> tempPair;
tempMap.insert(pair<string,string>("°","degrees"));
tempMap.insert(pair<string,string>("one","two"));
tempMap.insert(pair<string,string>("three","four"));
typedef map<string,string>::iterator it_type;
string temp="abc°def";
for(it_type iterator = tempMap.begin(); iterator != tempMap.end(); iterator++)
{
//cout << iterator->first << " " << iterator->second << endl;
string::size_type found=temp.find(iterator->first);
if (found!=string::npos)
{
temp.replace(found,1,iterator->second);
cout << endl <<"after replacement " << temp;
}
}
}
输出:替换后 abcdegrees.def
在输出中得到特殊字符,这是因为特殊字符°占用了2个字节。
【问题讨论】:
-
您可以使用vector
来存储它们并使用vector push_back() 来存储直到输入是换行符。然后你就可以随心所欲地操作了。 -
您遇到过哪些无法解决的问题,例如°字符?
-
您是否要求有人为您编写代码?您是否已经有无法运行的代码?
-
您可能想提及
°和其他此类“特殊”字符的编码方式:例如rtf-8、Unicode 等(之后你应该去找一个库)。