Replacement Array is an array of elements.
Format String contains conversion specifier %s, followed by optional index specifier [1], followed by optional length specifier :3.
Format String: %s[1]:3
%s is conversion specifier - mark the starting of conversion string
[1] is index specifier - corresponding index of Replacement Array
:3 is length specifier - number of characters to be taken from string
The replacement works as follows:
Example:
Replacement Array: Smart site India comparison Best
Format String: %sprix is the %s[4] online %s[3]:6 shopping %s:9 in %s
Output: Smartprix is the Best online compar shopping site in India.
If no index specifier is present with conversion specifier %s, Index 0, 1, 2, 3... are assigned to all in sequence from left to right.
In above example %sprix is %s[0]prix; %s:9 is %s[1]:9 and so on.
The specifier string is replaced by element of Replacement Array denoted by index specifier. If no element is found the specifier is not replaced.
In above example %s[4] is replaced by element at 4th index of the Replacement Array "Best". %sprix is replaced by Smartprix and so on.
%s[3]:6 is replaced by 'first 6 characters' of the element at 3rd index of the Replacement Array, i.e., "compar".
If the 'length specifier' is not present or is greater than length of the element then use whole string.
%s:9 is replaced by site, %s[4] is replaced by Best.
For any error case, specifier is not replaced.
Input:
There will be 2 lines in the input.
1st line contains space separated elements of Replacement Array
2nd line is Format String
Output:
Formatted String
INPUT 1
smart site india comaprision best
%sprix is the %s[4] online %s[3]:6 shopping %s:9 in %s
OUTPUT
smartprix is the best online comapr shopping site in india
INPUT 2
india boom startup up hub
%s %s[is] a %sing %s:5%s:5 %s[4]. and %s[6] are :4 of %s[-1].
OUTPUT
india %s[is] a booming startup hub. and %s[6] are :4 of %s[-1].
INPUT 3
hello lavish kothari
%s[2]:xyz
OUTPUT
%s[2]:xyz
Format String contains conversion specifier %s, followed by optional index specifier [1], followed by optional length specifier :3.
Format String: %s[1]:3
%s is conversion specifier - mark the starting of conversion string
[1] is index specifier - corresponding index of Replacement Array
:3 is length specifier - number of characters to be taken from string
The replacement works as follows:
Example:
Replacement Array: Smart site India comparison Best
Format String: %sprix is the %s[4] online %s[3]:6 shopping %s:9 in %s
Output: Smartprix is the Best online compar shopping site in India.
If no index specifier is present with conversion specifier %s, Index 0, 1, 2, 3... are assigned to all in sequence from left to right.
In above example %sprix is %s[0]prix; %s:9 is %s[1]:9 and so on.
The specifier string is replaced by element of Replacement Array denoted by index specifier. If no element is found the specifier is not replaced.
In above example %s[4] is replaced by element at 4th index of the Replacement Array "Best". %sprix is replaced by Smartprix and so on.
%s[3]:6 is replaced by 'first 6 characters' of the element at 3rd index of the Replacement Array, i.e., "compar".
If the 'length specifier' is not present or is greater than length of the element then use whole string.
%s:9 is replaced by site, %s[4] is replaced by Best.
For any error case, specifier is not replaced.
Input:
There will be 2 lines in the input.
1st line contains space separated elements of Replacement Array
2nd line is Format String
Output:
Formatted String
INPUT 1
smart site india comaprision best
%sprix is the %s[4] online %s[3]:6 shopping %s:9 in %s
OUTPUT
smartprix is the best online comapr shopping site in india
INPUT 2
india boom startup up hub
%s %s[is] a %sing %s:5%s:5 %s[4]. and %s[6] are :4 of %s[-1].
OUTPUT
india %s[is] a booming startup hub. and %s[6] are :4 of %s[-1].
INPUT 3
hello lavish kothari
%s[2]:xyz
OUTPUT
%s[2]:xyz
#include<bits/stdc++.h> using namespace std; int findCase(string &b,int index) { if(index+2>=b.size()) return 1; /* if(b[index+2]!=':' && b[index+2]!='[') return 1; */ if(b[index+2]==':' && index+3<b.size() && b[index+3]>='0' && b[index+3]<='9') return 4; if(b[index+2]==':') return 0; if(b[index+2]=='[') { int i=index+3; if(i>=b.size() || b[i]<='0' || b[i]>='9') return 0; while(i<b.size() && b[i]>='0' && b[i]<='9') i++; if(i==b.size()) return 0; // for case %s[1234 else if(b[i]==']') { if(i+1>=b.size() || b[i+1]!=':') return 2; else if(b[i+1]==':') { if(i+2>=b.size()) return 0; else if(b[i+2]>='0' && b[i+2]<='9') return 3; else return 0; } } else return 1; } return 1; } int extract(string &b,int index) { int sum=0; while(index<b.size() && b[index]>='0' && b[index]<='9') { sum=sum*10+b[index]-'0'; index++; } return sum; } void findFormattedString(string &a,string &b) { vector<string>vs; int start=0;int len=0; for(int i=0;i<a.size();i++) { if(a[i]==' ') { vs.push_back(a.substr(start,len)); while(i<a.size() && a[i]==' ') i++; start=i; len=0; } len++; } if(a[a.size()-1]!=' ') vs.push_back(a.substr(start,a.size()-start)); /* for(int i=0;i<vs.size();i++) cout<<"**"<<vs[i]<<endl; */ int counter=0,startfrom=0; while(1) { int index=b.find("%s",startfrom); if(index<0) break; int c=findCase(b,index); if(c==1) { if(counter>=vs.size()) { startfrom=index+1; continue; } b.erase(b.begin()+index,b.begin()+index+2); b.insert(index,vs[counter]); counter++; } else if(c==2) { int number=extract(b,index+3); if(number<0 || number>=vs.size()) { startfrom=index+1; continue; } int i=index+3; while(i<b.size() && b[i]>='0' && b[i]<='9') i++; b.erase(b.begin()+index,b.begin()+i+1); b.insert(index,vs[number]); } else if(c==3) { int number1=extract(b,index+3); if(number1<0 || number1>=vs.size()) { startfrom=index+1; continue; } int i=index+3; while(i<b.size() && b[i]>='0' && b[i]<='9') i++; b.erase(b.begin()+index,b.begin()+i+2); int number2=extract(b,index); i=index; while(i<b.size() && b[i]>='0' && b[i]<='9') i++; b.erase(b.begin()+index,b.begin()+i); if(vs[number1].size()<=number2) { b.insert(index,vs[number1]); } else b.insert(index,vs[number1].substr(0,number2)); } else if(c==4) { if(counter>=vs.size()) { startfrom=index+1; continue; } int number=extract(b,index+3); int i=index+3; while(i<b.size() && b[i]>='0' && b[i]<='9') i++; b.erase(b.begin()+index,b.begin()+i); if(vs[counter].size()<=number) { b.insert(index,vs[counter++]); } else b.insert(index,vs[counter++].substr(0,number)); } else if(c==0) startfrom=index+1; } } int main() { string a,b; getline(cin,a); getline(cin,b); findFormattedString(a,b); cout<<b<<endl; return 0; }
No comments:
Post a Comment