您的位置:首页 > 编程语言 > C语言/C++

【c++】字符串替换:——面试题

2017-08-30 17:50 232 查看
问题描述:—–(去哪网)

请你实现一个简单的字符串替换函数。原串中需要替换的占位符为”%s”,请按照参数列表的顺序一一替换占位符。若参数列表的字符数大于占位符个数。则将剩下的参数字符添加到字符串的结尾。给定一个字符串A,同时给定它的长度n及参数字符数组arg和它的大小m,请返回替换后的字符串。保证参数个数大于等于占位符个数。保证原串由大小写英文字母组成,同时长度小于等于500。

测试样例:

“A%sC%sE”,7,[‘B’,’D’,’F’]

返回:”ABCDEF”

代码实现:

#include<iostream>
#include<string>
#include<vector>
#include<stdio.h>
using namespace std;
class StringFormat
{
public:
string formatstring(const string& str, int n,  vector<char>& arg, int m)
{
string _str = str;
string ret;//定义一个空字符串,用来返回结果
if (_str.empty() == true || arg.empty() == true)//字符串不能为空,或者arg不能为空
return ret;
int i = 0;
while (_str.find("%s") != string::npos)
{
ret += _str.substr(0, _str.find("%s"));//把第一次出现"%s"之前的字符串(子串拿出来)给ret
ret += arg[i++];//把arg里要拿来替换的字符加在ret后面
_str = _str.substr(_str.find("%s") + 2);//把%后没有替换的部分赋值后继续
}
ret += _str;//加上最后不需要替换的部分
while (i < m)//已经替换完,把arg剩下的部分加给ret
{
ret += arg[i++];
}
return ret;
}

};
int main()
{
StringFormat sf;
const string str("A%sC%sE");
char arr[] = { 'B', 'D', 'F' };
vector<char> arg;
int n = str.length();
int m = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < m; i++)
{
arg.push_back(arr[i]);
}
string ret =sf.formatstring(str, n, arg, m);
cout << ret << endl;
system("pause");
return 0;
}


知识点:

string中的find()的使用!

1,size_t find(const string&str,size_t pos = 0)const

第一个参数是要查找的字符串,第二个参数的从什么位置开始查找(0表示从整个字符串查找!)。若找到,则返回的出现的位置;若没找到,则返回string::npos。

2, size_t find(char c,size_t pos = 0)const 查找字符!

注意:第一个字符的位置是0,不是1。

string中的substr()的使用!

1, string substr (size_t pos = 0, size_t len = npos) const;

生成子串。子字符串是从字符位置pos开始并跨越len个字符(或直到字符串的末尾,以先到者为准)的部分。

len = npos表示直到字符串结尾的所有位置。

注意:区间位置是左闭右开

例如:

string str("hhh%shh");
cout << str.find("%s") << endl;//输出3
cout << str.substr(0, 4) << endl;//输出hhh%
cout << str.substr(1) << endl;//输出hh%shh


方法二:

string formatString(string str, int n, vector<char>& arg, int m)
{
string ret = "";
int count = 0;
for (int i = 0; i<n; i++){
if (str[i] == '%'&&i + 1<n&&str[i + 1] == 's'){
ret += arg[count];
count++;
i++;
}
else{
ret += str[i];
}
}
if (count<m){
for (int i = count; i<m; i++){
ret += arg[i];
}
}
return ret;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: