在 C++ 中查找传入字符串中的模式(包括像°这样的特殊字符)

Posted

技术标签:

【中文标题】在 C++ 中查找传入字符串中的模式(包括像°这样的特殊字符)【英文标题】:Find a pattern in incoming string(including special characters like °) in c++ 【发布时间】: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 等(之后你应该去找一个库)。 【参考方案1】:

使用宽字符支持(wstringwcoutL-前缀字符串文字):

#include <map> 
#include <string>
#include <iostream>
#include <iomanip>

using namespace std;

int main() 

    map<wstring,wstring> tempMap;
    pair<wstring,wstring> tempPair;

    tempMap.insert(pair<wstring,wstring>(L"°", L"degrees"));
    tempMap.insert(pair<wstring,wstring>(L"one", L"two"));
    tempMap.insert(pair<wstring,wstring>(L"three", L"four"));
    typedef map<wstring,wstring>::iterator it_type;

    wstring temp = L"abc°def";

    for(it_type iterator = tempMap.begin(); iterator != tempMap.end(); iterator++) 
        wstring::size_type found = temp.find(iterator->first);
        if (found != wstring::npos) 
            temp.replace(found, 1, iterator->second);
            wcout << "after replacement   " << temp << endl;
        
    

【讨论】:

它工作正常,但我怎样才能动态地将 L 前缀到字符串 ***.com/questions/2573834/…

以上是关于在 C++ 中查找传入字符串中的模式(包括像°这样的特殊字符)的主要内容,如果未能解决你的问题,请参考以下文章

正则RE

如何将字符串从make文件传递到C++程序

C++:啥更快 - 在 hashmap 或 switch 语句中查找?

如何从 C++ 中的字符串中快速查找和子串多个项目?

C++学习(三九八)grep命令

如何使用特定符号 C++ 查找和替换字符串中的所有字符