Quick actions

cmd+k|ctrl+k

Navigation

Languages

single tpl

Snippet info

Language

Cpp

Visibility

public

Author

legacy-v1-32

Created

2017-02-17T08:27:48Z

Updated

2017-02-28T20:52:12Z

#include <iostream>
#include <string.h>
#include <vector>
#include <map>
#include <memory>
using namespace std;

typedef std::shared_ptr<vector<string> > VecStrPtr;
typedef vector<string> VecStr;
map<string, string> vars;
int main() {
    
    
    vars["world"] = "earth";
    vars["testName"] = "zivee";
    vars["tm"] = "more";

    string test("Hello {$world}! {$testName} , again {$tm}");
    const char* tpl =  test.c_str();
    

    VecStrPtr placeholdsPtr(new VecStr);
    VecStrPtr phasePtr(new VecStr);

    char start = '{';
    char prefix = '$';
    char end = '}';
    char tmp[128];
    unsigned i,j;
    unsigned p=0;
    for (i=0; tpl[i]!='\0'; ++i) {
        if (tpl[i] == start && tpl[i+1] == prefix ) {
            phasePtr->push_back(test.substr(p, i-p));
            for(j = 0; j<128 && tpl[i+j+2]!=end && tpl[i+j+2]!='\0'; ++j) {
                tmp[j] = tpl[i+j+2];
            }
            tmp[j] = '\0';
            i += j+2;
            p = i+1;
            placeholdsPtr->push_back(tmp);
        }
    }
    if (tpl[p]!='\0') {
        phasePtr->push_back(test.substr(p));
    }
    
    
    //share ptr
    
    
    
    string result;
    for (size_t i=0; i<placeholdsPtr->size(); ++i){
        result.append(phasePtr->at(i));
        result.append(vars[placeholdsPtr->at(i)]);
    }

    if (i < phasePtr->size()) {
        result.append(phasePtr->at(i));
    }
        
    cout <<result << endl;


    return 0;
}
INFO