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

问题描述:—–(去哪网)
请你实现一个简单的字符串替换函数。原串中需要替换的占位符为”%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;
    }

猜你喜欢

转载自blog.csdn.net/prefect_boy/article/details/77720112
今日推荐