给定一个字符串A,同时给定它的长度n及参数字符数组arg,请返回替换后的字符串。保证参数个数大数等于占位符的个数。保证原串由大小写字母组成,同时长度小于等于500。
测试样例:
“A%sC%sE” ,7,['B','D','F'],3
返回
“ABCDEF”
#include<vector>
#include<assert.h>
#include<string>
//n是原串的长度,m是要替换的字符的数量
string Formatstring(const string& str, int n, const vector<char>& arg, int m)
{
//重新开辟一段空间并扩容,防止后面的增容开销
string formatstr;
formatstr.reserve(formatstr.size());
size_t pos = 0;//pos是指向vector中的元素
for (size_t i = 0; i < n; ++i)//i是指向str中的元素
{
if ((str[i] == '%') && (i + 1 < n) && (str[i + 1] == 's'))
{
assert(pos < m);
formatstr.push_back(arg[pos++]);
++i;
}
else
{
formatstr.push_back(str[i]);
}
}
while (pos < m)
{
formatstr.push_back(arg[pos++]);
}
return formatstr;
}
void Test()
{
string str = "A%sC%sE";
vector<char> arg;
arg.push_back('B');
arg.push_back('D');
arg.push_back('F');
string formastr = Formatstring(str, 7, arg, 3);
cout << formastr << endl;
}
int main()
{
Test();
system("pause");
return 0;
}