একটি স্ট্রিং দেওয়া আছে। HTML স্পেশাল ক্যারেক্টার এন্টিটিগুলো (যেমন ", &, <, >, ⁄) তাদের নরমাল ক্যারেক্টারে রিপ্লেস করতে হবে।
ইনপুট: "& is changed but &ambassador; is not." → আউটপুট: "& is changed but &ambassador; is not."
সমাধানের ধাপগুলো:
HTML এন্টিটি ম্যাপ
mবানাবস্ট্রিংকে স্পেস দিয়ে স্প্লিট করব (ওয়ার্ড বাই ওয়ার্ড প্রসেস)
প্রতি ওয়ার্ডে
&পেলে;পর্যন্ত পার্স করবযদি ম্যাপে থাকে তবে রিপ্লেস করব, না থাকলে অরিজিনাল রাখব
ফাইনাল স্ট্রিং জড়িয়ে রিটার্ন করব
উদাহরণ
নিচের কোডটি দেখুন −
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
vector<string> split(string& s, char delimiter) {
vector<string> tokens;
string token;
istringstream tokenStream(s);
while(getline(tokenStream, token, delimiter)) {
tokens.push_back(token);
}
return tokens;
}
void out(vector<string> v) {
for(string s : v) cout << s << endl;
}
string entityParser(string text) {
vector<string> v = split(text, ' ');
string ret = "";
map<string, string> m;
m["""] = "\"";
m["'"] = "'";
m["&"] = "&";
m[">"] = ">";
m["<"] = "<";
m["⁄"] = "/";
for (int i = 0; i < v.size(); i++) {
string s = v[i];
string temp = "";
int n = v[i].size();
int k = 0;
while (k < n) {
if (v[i][k] == '&') {
temp += v[i][k];
k++;
while (k < n && v[i][k] != ';') {
temp += v[i][k];
k++;
}
temp += v[i][k];
k++;
if (m.count(temp))
ret += m[temp];
else
ret += temp;
temp = "";
} else {
ret += v[i][k];
k++;
}
}
if (temp.size() && m.count(temp))
ret += m[temp];
else if (temp.size())
ret += temp;
if (i != v.size() - 1)
ret += " ";
}
return ret;
}
};
int main() {
Solution ob;
cout << (ob.entityParser("& is changed but &ambassador; is not."));
}
ইনপুট
"& is changed but &ambassador; is not."
আউটপুট
& is changed but &ambassador; is not.